nixpkgs-unstable 命令式可见,但不是声明式可见

nixpkgs-unstable 命令式可见,但不是声明式可见

我正在尝试安装这个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但不确定是否正确。我有nixosroot 和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>您没有预料到的旧版本,例如geopandas17.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

相关内容