我正在尝试安装这个Python库
python3.6-geopandas-0.3.0
。我成功地安装了它
$ nix-env -iA nixpkgs.python3Packages.geopandas
但是我需要创建一个表达式,以便我的 Python 环境包含它。
with import <nixpkgs> {};
python36.withPackages (ps: with ps; [
geopandas
])
结果我得到了
installing ‘python3-3.6.4-env’
error: undefined variable ‘geopandas’
我的系统中两者都已nixos
配置。nixpkgs-unstable
但不确定是否正确。我有nixos
root 和nixpkgs
我的用户的频道。
$ echo $NIX_PATH
nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels
我想nixpkgs-unstable
为我的用户设置默认通道,或者至少使其包作为覆盖层可见,这样我就可以成功运行上述表达式。
答案1
你的表达对我现在的 nixpkgs 大师来说很有效。我会调查您是否NIX_PATH
没有使用一些<nixpkgs>
您没有预料到的旧版本,例如geopandas
17.09 稳定分支上不存在的版本。
答案2
我能够在 NixOS 上重现这一点。
如果您查找的话,您的NIX_PATH
集合只是 的符号nixpkgs
链接。让所有期望指向有效通道路径的表达式都工作起来可能是一个小技巧(尽管我不认为这是 nix 系统的要求,并且似乎源自/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs
/nix/var/nix/profiles/per-user/root/channels/nixos/
<nixpkgs>
nix 守护进程)。
要修复它,您要么必须重新定义NIX_PATH
以指向实际的 nixpkgs 通道,要么必须明确声明通道的路径,而不是<nixpkgs>
在表达式中使用。
您可以在以下位置找到可用的频道~/.nix-defexpr
:
$tree -l -L 2 ~/.nix-defexpr/
/home/user1/.nix-defexpr/
├── channels -> /nix/var/nix/profiles/per-user/user1/channels
│ ├── ...
│ └── nixpkgs -> /nix/store/qz1.../nixpkgs
└── channels_root -> /nix/var/nix/profiles/per-user/root/channels
├── ...
└── nixos -> /nix/store/53b.../nixos
(channels
包含用户特定的频道,同时channels_root
包含root订阅并对所有用户可用的频道)
因此,如果您决定使用 user1 的订阅,那么nixpkgs
您将运行:
NIX_PATH="nixpkgs=/home/user1/.nix-defexpr/channels/nixpkgs" nix-env -f default.nix -i