【问题标题】:How can I define a Nix environment that defaults to Python 3.5如何定义默认为 Python 3.5 的 Nix 环境
【发布时间】:2016-10-12 21:33:56
【问题描述】:

我在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,而 python3 是 Nix 安装的 Python 3.5 二进制文件的符号链接。有没有办法定义环境,让python 指向 Nix Python 3.5?

【问题讨论】:

    标签: python nix


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      【解决方案2】:

      一个简单的解决方案是在您的环境中添加一个 shell 挂钩,定义一个从 pythonpython3 的别名。这个别名只有在你运行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'
        '';
      }
      

      【讨论】:

      • 目前,这似乎是最好的解决方案,尽管我不喜欢它不适用于使用例如/usr/bin/env python。也就是说,有一个新的拉取请求 (github.com/NixOS/nixpkgs/pull/19554),似乎 python3 很快就会成为 Nix 的默认设置。
      猜你喜欢
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多