2016-10-12 8 views
2

デフォルトは、私がdefault.nixで以下の環境定義されていることニックス環境を定義することができます(Ubuntuの上で動作している私はnix-shellを実行した場合、pythonはまだ/usr/bin/pythonで、システムのpythonになりますどのように私は、Python 3.5

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

を)python3は、NixによってインストールされたPython 3.5バイナリへのシンボリックリンクです。 pythonがNix Python 3.5を指し示すように環境を定義する方法はありますか?

答えて

1

環境にシェルフックを追加して、pythonからpython3にエイリアスを定義することが簡単な解決策の1つです。

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

はあなたが唯一のpythonシンボリックリンクを含む新しい派生を作成するためにrunCommandを使用することができます:あなたはnix-shellを実行する場合にのみ、このエイリアスがアクティブになります。今の

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 
関連する問題