Sua expressão funciona para mim no master nixpkgs atual. Eu investigaria se o seu NIX_PATH
não está aceitando alguns <nixpkgs>
antigos que você não esperava, por exemplo, geopandas
não está presente no ramo estável do 17.09.
Estou tentando instalar esta biblioteca Python %código%. E eu instalei-o com sucesso com
python3.6-geopandas-0.3.0
No entanto, preciso criar uma expressão para que meu ambiente Python a inclua.
with import <nixpkgs> {};
python36.withPackages (ps: with ps; [
geopandas
])
Acontece que eu recebo
installing ‘python3-3.6.4-env’
error: undefined variable ‘geopandas’
Eu tenho os dois $ nix-env -iA nixpkgs.python3Packages.geopandas
e nixos
configurados no meu sistema. Não tenho certeza se corretamente. Eu tenho canal nixpkgs-unstable
para raiz e nixos
para meu usuário.
$ 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
Gostaria de tornar o nixpkgs
o canal padrão do meu usuário ou, pelo menos, tornar seus pacotes visíveis como uma sobreposição, para que eu pudesse executar a expressão acima com êxito.
Sua expressão funciona para mim no master nixpkgs atual. Eu investigaria se o seu NIX_PATH
não está aceitando alguns <nixpkgs>
antigos que você não esperava, por exemplo, geopandas
não está presente no ramo estável do 17.09.
Consegui reproduzir isso no NixOS.
Seu NIX_PATH
define nixpkgs
para /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs
, o que, se você procurar, é apenas um link simbólico para /nix/var/nix/profiles/per-user/root/channels/nixos/
. É provavelmente um pequeno truque para fazer funcionar todas as expressões que estão em estado selvagem que esperam que <nixpkgs>
aponte para um caminho de canal válido (mesmo que eu não ache que seja um requisito para um sistema nix e pareça originar de nix-daemon ).
Para corrigi-lo, você precisa redefinir NIX_PATH
para apontar para um canal nixpkgs real ou declarar explicitamente o caminho para o canal em vez de usar <nixpkgs>
em sua expressão.
Você pode encontrar seus canais disponíveis em ~/.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
contém os canais específicos do usuário, enquanto channels_root
contém os canais com os quais a raiz se inscreveu e estão disponíveis para todos os usuários)
Então, se você decidiu usar a assinatura do usuário1 para nixpkgs
, você executaria:
NIX_PATH="nixpkgs=/home/user1/.nix-defexpr/channels/nixpkgs" nix-env -f default.nix -i