2

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

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

如果我运行nix-shellpython仍将是系统 python /usr/bin/python(在 Ubuntu 上运行),同时python3是 Nix 安装的 Python 3.5 二进制文件的符号链接。有没有办法定义python指向 Nix Python 3.5 的环境?

4

2 回答 2

3

您可以使用它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
  ];
}


nix-shell --pure --run 'python --version'
Python 3.5.3
于 2017-09-06T20:16:01.097 回答
1

一个简单的解决方案可能是在您的环境中添加一个 shell 挂钩,以定义一个别名 from pythonto python3。此别名仅在您运行时才有效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'
  '';
}
于 2016-10-13T09:10:15.913 回答