如何定义默认为python3.5的Nix环境

2024-06-26 01:46:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在default.nix中定义了以下环境:

with import <nixpkgs> {};
stdenv.mkDerivation rec {
  name = "env";
  env = buildEnv { name = name; paths = buildInputs; };
  buildInputs = [
    python35
    python35Packages.pyyaml
  ];
}

如果我运行nix-shellpython仍然是/usr/bin/python(在Ubuntu上运行)的系统python,而{}是Nix安装的python3.5二进制文件的符号链接。有没有一种方法可以定义环境使python指向nixpython3.5?在


Tags: nameimportenvdefault定义环境withnix
2条回答

您可以使用runCommand来创建一个只包含python符号链接的新派生。在

with import <nixpkgs> {};
stdenv.mkDerivation rec {
  name = "env";
  env = buildEnv { name = name; paths = buildInputs; };
  buildInputs = [
    (runCommand "python-alias" {} ''
      mkdir -p $out/bin
      ln -s ${python35}/bin/python3 $out/bin/python
    '')
    python35
    python35Packages.pyyaml
  ];
}


^{pr2}$

一个简单的解决方案可以是在您的环境中添加一个shell钩子,定义一个从python到{}的别名。此别名只有在您运行nix-shell时才处于活动状态:

with import <nixpkgs> {};
stdenv.mkDerivation rec {
  name = "env";
  env = buildEnv { name = name; paths = buildInputs; };
  buildInputs = [
    python35
    python35Packages.pyyaml
  ];
  # Customizable development shell setup
  shellHook = ''
    alias python='python3'
  '';
}

相关问题 更多 >