下列的之前的这个答案这是给我的,我开始使用此存储库的 git 克隆来关注 nixpkgs-unstable 频道:https://github.com/NixOS/nixpkgs-channels/
我的克隆在~/nixpkgs
.我nix-shell
用选项打电话-I ~
,效果很好。因为nix-env
该-I
选项不存在,但我知道应该使用该-f
选项。到目前为止(在两台不同的机器上)我就是这样做的(nix-env
使用 option调用-f ~
)并且效果很好。
现在,我在第三台机器上,尝试重现相同的过程。我尝试使用命令安装 nixpkgs-unstable 中但不在我的系统通道 nixos-16.09 中的软件包nix-env -f ~ -iA nixpkgs.exercism
,但失败并显示以下错误消息:
warning: name collision in input Nix expressions, skipping ‘/home/theo/nixpkgs’
error: attribute ‘exercism’ in selection path ‘nixpkgs.exercism’ not found
搜索此错误消息给了我这个http://lists.science.uu.nl/pipermail/nix-dev/2013-October/011898.html
但我不属于所描述的情况。我没有作为普通用户关注任何频道(nix-channel --list
答案为空),我唯一的系统范围频道称为 nixos(进一步证实,.nix-defexpr/
仅包含,而channels_root/
又包含binary-caches
,manifest.nix
和nixos
)。
我做错了什么?
注意:我可以通过发出命令来解决我的问题nix-env -f ~/nixpkgs -iA exercism
,但我仍然很想了解为什么我的第一个解决方案不起作用(即使它在另外两台机器上起作用)。
答案1
看着来源看来您很可能nixpkgs
在~
.
nix-env
搜索(递归)所有目录以default.nix
将父目录添加为顶级属性。
使用nix-env -f ~
似乎是一个坏主意 - 需要大量搜索和发生此类冲突的机会。除非我遗漏了一些东西,否则符号链接~/nixpkgs
似乎~/.nix-defexpr
是一个很好的解决方案。
简单地使用 并没有什么问题nix-env -f nixpkgs -iA exercism
。在这种形式中,nixdefault.nix
直接在-f
参数中看到 a 并将其用作顶级属性集。
如果您找不到另一个 nixpkgs 目录,我会尝试使用该--show-trace
选项。