Nix
如何發現並安裝特定版本的軟體包?
我
nix
在 Linux 系統上安裝了 ,並且添加了頻道nixpkgs-unstable
。我現在可以安裝軟體包,例如gcc
:% nix-env --install gcc installing 'gcc-7.4.0' ... created 78 symlinks in user environment
如果我查看諸如 之類的目錄
~/.nix-defexpr/channels/nixpkgs/pkgs/development/compilers/gcc/
,我會發現有多種版本,都帶有default.nix
.
- 如何使用
ghc-env --query
或其他友好工具發現這些隱藏的包版本?- 假設我想在
gcc
我的使用者環境中安裝版本 8,我應該怎麼做?我可以一次獲得多個版本gcc
嗎?我一直在瀏覽 Nix 的大量文件,但他們到處都在說*“使用 Nix,您可以一次安裝任意數量的版本,它們永遠不會衝突”,同時“您應該只安裝一次一個版本,在您選擇的頻道中硬編碼”*。它有什麼意義?
我建議使用屬性路徑,例如
nix-env -iA nixpkgs.gcc8
在您的情況下,“nixpkgs”是因為您以這種方式命名了您的頻道(NixOS 使用者通常會使用“nixos”名稱)。與普通名稱相反,屬性路徑是明確的。如何發現這些?一種方法是例如添加
-P
到nix-env -qa
查詢中。我通常使用製表符補全nix repl
或瀏覽all-packages.nix
文件:-)(除非我知道或試圖猜測 attrpath)旁注:
- 如果您嘗試在一個配置文件中同時擁有多個版本(例如 by
nix-env
),則在創建配置文件的符號連結樹時通常會發生衝突,除非您設置優先級。- 在單通道版本(即 nixpkgs 送出)中,我們盡量保持每個包的版本和配置數量最少,通常只有一個。這是通過節省資源(建構和分發二進製文件)和更好的質量/維護來推動的。
您可以從這裡查看軟體包的所有過去版本以及如何安裝它們https://lazamar.co.uk/nix-versions
Nix 僅在派生中保留最新版本的包。如果多個主要版本很流行(如 python2 和 python3),則會列出每個主要版本的最新版本。
不幸的是,nix 沒有本地方法來搜尋過去在以前的派生中可用的包的所有版本。
我編寫了連結來解決這個問題的工具。