web-dev-qa-db-ja.com

nixpkgs-命令型ではなく宣言型ではなく不安定に見える

これをインストールしようとしています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
dmvianna

あなたの表現は、現在のnixpkgsマスターで機能します。私はあなたのNIX_PATH古いものを取っていません<nixpkgs>あなたが予期していなかったこと、例えばgeopandasは17.09安定版ブランチには存在しません。

2

これをNixOSで再現することができました。

NIX_PATHnixpkgs/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgsに設定します。これは、検索すると/nix/var/nix/profiles/per-user/root/channels/nixos/への単なるシンボリックリンクです。 <nixpkgs>が有効なチャネルパスを指すことを期待する、実際に存在するすべての式を機能させるのはおそらく少しハックです(ただし、これはnixシステムの要件ではなく、 nix-daemon )。

これを修正するには、実際の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にはrootがサブスクライブし、すべてのユーザーが使用できるチャネルが含まれます)

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

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

2
fghibellini