如何定义默认为 Python 3.5 的 Nix 环境
How can I define a Nix environment that defaults to Python 3.5
我在 default.nix
中定义了以下环境:
with import <nixpkgs> {};
stdenv.mkDerivation rec {
name = "env";
env = buildEnv { name = name; paths = buildInputs; };
buildInputs = [
python35
python35Packages.pyyaml
];
}
如果我 运行 nix-shell
,python
仍将是系统 python 在 /usr/bin/python
(运行ning 在 Ubuntu) 而 python3
是 Nix 安装的 Python 3.5 二进制文件的符号链接。有没有办法定义环境,使 python
指向 Nix Python 3.5?
一个简单的解决方案是向您的环境添加一个 shell 挂钩,以定义从 python
到 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'
'';
}
您可以使用 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
我在 default.nix
中定义了以下环境:
with import <nixpkgs> {};
stdenv.mkDerivation rec {
name = "env";
env = buildEnv { name = name; paths = buildInputs; };
buildInputs = [
python35
python35Packages.pyyaml
];
}
如果我 运行 nix-shell
,python
仍将是系统 python 在 /usr/bin/python
(运行ning 在 Ubuntu) 而 python3
是 Nix 安装的 Python 3.5 二进制文件的符号链接。有没有办法定义环境,使 python
指向 Nix Python 3.5?
一个简单的解决方案是向您的环境添加一个 shell 挂钩,以定义从 python
到 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'
'';
}
您可以使用 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