私に与えられた この前の答え に続いて、私はこのリポジトリのgitクローンでnixpkgs-unstableチャネルをフォローし始めました: https://github.com/NixOS/nixpkgs-channels /
私のクローンは~/nixpkgs
にあります。オプションnix-Shell
を指定して-I ~
を呼び出していますが、正常に動作します。 nix-env
の場合、-I
オプションは存在しませんが、代わりに-f
オプションを使用する必要があることを理解しています。これまでのところ(2つの異なるマシンで)それを実行し(オプションnix-env
を指定して-f ~
を呼び出す)、正常に機能しました。
今、私は3番目のマシンを使用していて、同じプロセスを再現しようとしました。コマンドnix-env -f ~ -iA nixpkgs.exercism
を使用して、nixpkgs-unstableにあるが、システムチャネルnixos-16.09にはないパッケージをインストールしようとしましたが、次のエラーメッセージが表示されて失敗します。
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-caches
、manifest.nix
、およびnixos
)が含まれます。
私は何を間違えましたか?
注:代わりにコマンドnix-env -f ~/nixpkgs -iA exercism
を発行することで問題を修正できますが、最初のソリューションが機能しなかった理由を本当に理解したいと思います(他の2台のマシンで機能したとしても)。
source を見ると、~
のどこかに別のnixpkgs
ディレクトリがある可能性が非常に高いようです。
nix-env
は、すべてのディレクトリでdefault.nix
を(再帰的に)検索し、親ディレクトリを最上位の属性として追加します。
nix-env -f ~
を使用することは悪い考えのように思われます-そのような衝突の検索とチャンスには、非常に役立ちます。何か足りないものがない限り、~/nixpkgs
を~/.nix-defexpr
にシンボリックリンクするのは良い解決策のようです。
nix-env -f nixpkgs -iA exercism
を使用するだけでも問題はありません。この形式では、nixはdefault.nix
引数で-f
を直接認識し、それを最上位の属性セットとして使用します。
別のnixpkgsディレクトリが見つからない場合は、--show-trace
オプションを使用してみます。