Nixos

輸入 Nix 表達式中的名稱衝突與 nix-env -f

  • December 27, 2016

按照之前給我的答案,我開始使用此儲存庫的 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-cachesmanifest.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選項。

引用自:https://unix.stackexchange.com/questions/332272