web-dev-qa-db-ja.com

nix-env-fを使用した入力Nix式での名前の衝突

私に与えられた この前の答え に続いて、私はこのリポジトリの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-cachesmanifest.nix、およびnixos)が含まれます。

私は何を間違えましたか?

注:代わりにコマンドnix-env -f ~/nixpkgs -iA exercismを発行することで問題を修正できますが、最初のソリューションが機能しなかった理由を本当に理解したいと思います(他の2台のマシンで機能したとしても)。

6
Zimm i48

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オプションを使用してみます。

3
olejorgenb