簡體   English   中英

在非 NixOS 系統上使用 `nix` 安裝 Elixir 或 Erlang > 19 的規范方法是什么?

[英]What is the canonical way of installing Elixir or Erlang > 19 with `nix` on a non-NixOS system?

請從在非 NixOS 機器上安裝 Nix 包管理器之后,像對 10 歲的孩子一樣解釋它。 例如,我在 Mac 上,甚至沒有~/.config目錄。

我找到了以下(可能)相關資源,但我無法將它們拼湊在一起:


最后,我使用 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 你應該進入一個有iexmix可用的外殼。

很高興我當時發布了這個問題,因為答案很棒,但從那以后我意識到安裝解釋器沒有實際意義(特別是因為有時需要多個版本),所以只需按需使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM