2016-10-12 5 views
2

Я определил следующую среду в default.nix:Как я могу определить окружение Nix, что по умолчанию Python 3.5

with import <nixpkgs> {}; 
stdenv.mkDerivation rec { 
    name = "env"; 
    env = buildEnv { name = name; paths = buildInputs; }; 
    buildInputs = [ 
    python35 
    python35Packages.pyyaml 
    ]; 
} 

Если я бегу nix-shell, python еще будет система питона на /usr/bin/python (работает на Ubuntu), а python3 - символическая ссылка на двоичный файл Python 3.5, установленный Nix. Есть ли способ определить среду, чтобы python указывал на Nix Python 3.5?

ответ

1

Одним из простых решений может быть добавление оболочки оболочки в вашу среду, чтобы определить псевдоним от python до python3. Этот псевдоним будет активен только при запуске nix-shell:

with import <nixpkgs> {}; 
stdenv.mkDerivation rec { 
    name = "env"; 
    env = buildEnv { name = name; paths = buildInputs; }; 
    buildInputs = [ 
    python35 
    python35Packages.pyyaml 
    ]; 
    # Customizable development shell setup 
    shellHook = '' 
    alias python='python3' 
    ''; 
} 
+0

На данный момент, это кажется лучшим решением, хотя мне не нравится, что он не будет работать со скриптами, которые используют, например, '/ usr/bin/env python'. Тем не менее, есть новый запрос на перенос (https://github.com/NixOS/nixpkgs/pull/19554), и кажется, что python3 скоро станет по умолчанию в Nix. – tlo

1

Вы можете использовать runCommand создать новый вывод, который содержит только python симлинка.

with import <nixpkgs> {}; 
stdenv.mkDerivation rec { 
    name = "env"; 
    env = buildEnv { name = name; paths = buildInputs; }; 
    buildInputs = [ 
    (runCommand "python-alias" {} '' 
     mkdir -p $out/bin 
     ln -s ${python35}/bin/python3 $out/bin/python 
    '') 
    python35 
    python35Packages.pyyaml 
    ]; 
} 


nix-shell --pure --run 'python --version' 
Python 3.5.3