Nix

如何發現並安裝特定版本的軟體包?

  • May 12, 2020

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”名稱)。與普通名稱相反,屬性路徑是明確的。

如何發現這些?一種方法是例如添加-Pnix-env -qa查詢中。我通常使用製表符補全nix repl或瀏覽all-packages.nix文件:-)(除非我知道或試圖猜測 attrpath)

旁注:

  • 如果您嘗試在一個配置文件中同時擁有多個版本(例如 by nix-env),則在創建配置文件的符號連結樹時通常會發生衝突,除非您設置優先級。
  • 在單通道版本(即 nixpkgs 送出)中,我們盡量保持每個包的版本和配置數量最少,通常只有一個。這是通過節省資源(建構和分發二進製文件)和更好的質量/維護來推動的。

您可以從這裡查看軟體包的所有過去版本以及如何安裝它們https://lazamar.co.uk/nix-versions

Nix 僅在派生中保留最新版本的包。如果多個主要版本很流行(如 python2 和 python3),則會列出每個主要版本的最新版本。

不幸的是,nix 沒有本地方法來搜尋過去在以前的派生中可用的包的所有版本。

我編寫了連結來解決這個問題的工具。

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