輸入 Nix 表達式中的名稱衝突與 nix-env -f
按照之前給我的答案,我開始使用此儲存庫的 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
但我仍然很想了解為什麼我的第一個解決方案不起作用(即使它確實在另外兩台機器上起作用)。
查看原始碼,您似乎很可能
nixpkgs
在~
.
nix-env
搜尋(遞歸)所有目錄以default.nix
將父目錄添加為頂級屬性。使用
nix-env -f ~
似乎是個壞主意 - 非常需要搜尋和此類碰撞的機會。除非我缺少符號連結的東西~/nixpkgs
似乎~/.nix-defexpr
是一個很好的解決方案。簡單地使用
nix-env -f nixpkgs -iA exercism
. 在這種形式中,nixdefault.nix
直接在-f
參數中看到 a 並將其用作頂級屬性集。如果您找不到另一個 nixpkgs 目錄,我會嘗試使用該
--show-trace
選項。