[英]What is the canonical way of installing Elixir or Erlang > 19 with `nix` on a non-NixOS system?
請從在非 NixOS 機器上安裝 Nix 包管理器之后,像對 10 歲的孩子一樣解釋它。 例如,我在 Mac 上,甚至沒有~/.config
目錄。
我找到了以下(可能)相關資源,但我無法將它們拼湊在一起:
在 NixOS 18.03 上使用 Erlang 20.0 的 Elixir 1.5.1?
我在哪里指定beam.packages.erlang<rel>.elixir
確切?
這是需要的嗎?
最后,我使用 Erlang 21 安裝了最新的 Elixir,如下所示,但我確信這不是應該的方式。
$ # Cloned the `nixpkgs` repo from github and started the repl
$ # in the same the directory.
$
$ nix repl
Welcome to Nix version 2.0.4. Type :? for help.
nix-repl> :l . # if in the cloned `nixpkgs` repo
Added 9182 variables.
nix-repl> pkgs.beam.packages.erlangR21.elixir
«derivation /nix/store/vcadn6d6wgk1yjlci458vy8jqv66wwdy-elixir-1.6.5.drv»
nix-repl> :q
$ nix-store --realise /nix/store/vcadn6d6wgk1yjlci458vy8jqv66wwdy-elixir-1.6.5.drv
你走在正確的軌道上; 沒有必要重新開始。
要從nix repl
安裝軟件包,您可以使用:i
命令。
nix-repl> :i pkgs.beam.packages.erlangR21.elixir
這會將軟件包安裝到您的~/.nix-profile
,它位於$PATH
,因此您可以調用它。 相當於跑
nix-env -iA nixpkgs.beam.packages.erlangR21.elixir
nix-store -r
(或等效的nix-store --realise
)被認為是一個非常低級的工具。 它只能創建指向包的符號鏈接,而這很少是您想要的。 默認情況下它甚至不會創建垃圾收集根,因此如果您進行垃圾收集,符號鏈接將被破壞。
盡管nix-env -iA
是安裝軟件的有效方式,但您可以考慮~/.nix-profile
全局狀態並因此避免使用它。 在我看來, elixir
更像是與項目相關的,而不是與您的用戶相關的。 例如,您可能希望為某些項目使用不同的版本,並且與從事項目的其他人共享您的開發工具可能是有意義的。 那就是你可以使用nix-shell
。 這是 shell.nix的一個例子。
您可以創建一個專用的 shell 用於您的項目,並避免全局/為當前用戶安裝運行時。
Erlang/OTP 20 上 Elixir 的最小 nix shell 示例:
default.nix
文件的內容:
with import <nixpkgs> {};
stdenv.mkDerivation rec {
name = "env";
env = buildEnv { name = name; paths = buildInputs; };
buildInputs = [
beam.packages.erlangR20.elixir
inotify-tools
];
}
然后在終端中,導航到保存default.nix
的目錄,並調用nix-shell
。 你應該進入一個有iex
和mix
可用的外殼。
很高興我當時發布了這個問題,因為答案很棒,但從那以后我意識到安裝解釋器沒有實際意義(特別是因為有時需要多個版本),所以只需按需使用nix-shell
。
對於活動頻道中的當前版本:
nix-shell -p erlang
對於不在當前頻道中的其他版本,可以給出特定的頻道:
nix-shell -I nixpkgs=channel:nixos-unstable -p erlangR22
或者在NixOS/nixpkgs
克隆中添加 Nix 表達式的路徑:
$ nix-shell -I nixpkgs=~/clones/nixpkgs -p erlangR23
$ nix-env -qaP 'erlang*'
# ...
nixos.erlangR20 erlang-20.3.8.9
nixos.erlangR21 erlang-21.3.8.3
nixos.erlang erlang-22.1.7
# ...
$ nix-env -f ~/clones/nixpkgs/ -qaP 'erlang*'
# ...
nixos.erlangR20 erlang-20.3.8.9
nixos.erlangR21 erlang-21.3.8.3
nixos.erlang erlang-22.1.7
# ...
=== >>> erlangR23 erlang-23.0.2 <<<====
這個答案更詳細。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.