nixpkgs-unstable はコマンドで表示されますが、宣言的には表示されません。

nixpkgs-unstable はコマンドで表示されますが、宣言的には表示されません。

このPythonライブラリをインストールしようとしています python3.6-geopandas-0.3.0。正常にインストールしました

$ nix-env -iA nixpkgs.python3Packages.geopandas

しかし、私のPython環境に含まれるように式を作成する必要があります。

with import <nixpkgs> {};

python36.withPackages (ps: with ps; [
  geopandas
])

その結果、私は得た。

installing ‘python3-3.6.4-env’
error: undefined variable ‘geopandas’

どちらも私のシステムに設定されていますnixosnixpkgs-unstableしかし、それが正しいかどうかはわかりません。nixosルートとnixpkgsユーザーチャンネルがあります。

$ echo $NIX_PATH 
nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels

nixpkgs-unstable上記の式を正常に実行できるように、ユーザーのデフォルトチャンネルを設定するか、少なくともパッケージをオーバーレイとして表示したいと思います。

答え1

あなたの表現は今、nixpkgsの専門家である私にぴったりです。 17.09安定ブランチに存在しないバージョンなど、予期しない以前のNIX_PATHバージョンを使用していないかどうかを調べます。<nixpkgs>geopandas

答え2

NixOSでこれを再現できました。

あなたがそれを見つけたら、あなたのNIX_PATHコレクションは単にnixpkgsシンボリックリンクです。動作する有効なチャネルパスを指すと予想されるすべての式を取得することは、少しトリックかもしれません。 (たとえこれがnixシステムの要件ではないと考えており、以下に由来するようです。/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nix/var/nix/profiles/per-user/root/channels/nixos/<nixpkgs>nixデーモン)。

この問題を解決するには、実際のnixpkgsチャネルを指すように上書きするか、式でチャネルを使用するNIX_PATH代わりにチャネルへのパスを明示的に宣言する必要があります。<nixpkgs>

以下で利用可能なチャンネルを見つけることができます~/.nix-defexpr

$tree -l -L 2 ~/.nix-defexpr/
/home/user1/.nix-defexpr/
├── channels -> /nix/var/nix/profiles/per-user/user1/channels
│   ├── ...
│   └── nixpkgs -> /nix/store/qz1.../nixpkgs
└── channels_root -> /nix/var/nix/profiles/per-user/root/channels
    ├── ...
    └── nixos -> /nix/store/53b.../nixos

channelsユーザーごとのチャンネルとchannels_rootルートで購読し、すべてのユーザーが利用できるチャンネルを含む)

したがって、user1のサブスクリプションを使用することにした場合は、nixpkgs次のようにします。

NIX_PATH="nixpkgs=/home/user1/.nix-defexpr/channels/nixpkgs" nix-env -f default.nix -i

関連情報