nixpkgs-unstable visible imperativamente mas não declarativamente [closed]

1

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.

    
por dmvianna 16.02.2018 / 06:15

2 respostas

2

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.

    
por 16.02.2018 / 09:54
2

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

    
por 17.02.2018 / 16:09