at 16.09-beta 1.5 kB view raw
1{ stdenv, python, buildEnv, makeWrapper 2, extraLibs ? [] 3, postBuild ? "" 4, ignoreCollisions ? false }: 5 6# Create a python executable that knows about additional packages. 7let 8 recursivePthLoader = import ../../python-modules/recursive-pth-loader/default.nix { stdenv = stdenv; python = python; }; 9 env = ( 10 let 11 paths = stdenv.lib.filter (x : x ? pythonPath) (stdenv.lib.closePropagation extraLibs) ++ [ python recursivePthLoader ]; 12 in buildEnv { 13 name = "${python.name}-env"; 14 15 inherit paths; 16 inherit ignoreCollisions; 17 18 postBuild = '' 19 . "${makeWrapper}/nix-support/setup-hook" 20 21 if [ -L "$out/bin" ]; then 22 unlink "$out/bin" 23 fi 24 mkdir -p "$out/bin" 25 26 for path in ${stdenv.lib.concatStringsSep " " paths}; do 27 if [ -d "$path/bin" ]; then 28 cd "$path/bin" 29 for prg in *; do 30 if [ -f "$prg" ]; then 31 rm -f "$out/bin/$prg" 32 makeWrapper "$path/bin/$prg" "$out/bin/$prg" --set PYTHONHOME "$out" 33 fi 34 done 35 fi 36 done 37 '' + postBuild; 38 39 passthru.env = stdenv.mkDerivation { 40 name = "interactive-${python.name}-environment"; 41 nativeBuildInputs = [ env ]; 42 43 buildCommand = '' 44 echo >&2 "" 45 echo >&2 "*** Python 'env' attributes are intended for interactive nix-shell sessions, not for building! ***" 46 echo >&2 "" 47 exit 1 48 ''; 49 }; 50 }) // { 51 inherit python; 52 inherit (python) meta; 53 }; 54in env