使用 nix-env -f 输入 Nix 表达式中的名称冲突

Zim*_*i48 6 nixos nix

按照之前给我的答案,我开始关注 nixpkgs-unstable 频道,并使用此存储库的 git 克隆: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
Run Code Online (Sandbox Code Playgroud)

搜索此错误消息给了我这个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但我仍然很想了解为什么我的第一个解决方案不起作用(即使它在另外两台机器上起作用)。

ole*_*enb 3

查看源代码,您很可能nixpkgs~.

nix-env搜索(递归)所有目录以将default.nix父目录添加为顶级属性。

使用nix-env -f ~似乎是一个坏主意 - 需要大量搜索和发生此类冲突的机会。除非我遗漏了一些东西,否则符号~/nixpkgs链接~/.nix-defexpr似乎是一个很好的解决方案。

简单地使用 并没有什么问题nix-env -f nixpkgs -iA exercismdefault.nix在这种形式中,nix直接在参数中看到 a-f并将其用作顶级属性集。

如果您找不到另一个 nixpkgs 目录,我会尝试使用该--show-trace选项。