at 17.09-beta 1.6 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 = let 10 paths = stdenv.lib.closePropagation (extraLibs ++ [ python recursivePthLoader ] ) ; 11 in buildEnv { 12 name = "${python.name}-env"; 13 14 inherit paths; 15 inherit ignoreCollisions; 16 17 postBuild = '' 18 . "${makeWrapper}/nix-support/setup-hook" 19 20 if [ -L "$out/bin" ]; then 21 unlink "$out/bin" 22 fi 23 mkdir -p "$out/bin" 24 25 for path in ${stdenv.lib.concatStringsSep " " paths}; do 26 if [ -d "$path/bin" ]; then 27 cd "$path/bin" 28 for prg in *; do 29 if [ -f "$prg" ]; then 30 rm -f "$out/bin/$prg" 31 if [ -x "$prg" ]; then 32 makeWrapper "$path/bin/$prg" "$out/bin/$prg" --set PYTHONHOME "$out" --set PYTHONNOUSERSITE "true" 33 fi 34 fi 35 done 36 fi 37 done 38 '' + postBuild; 39 40 inherit (python) meta; 41 42 passthru = python.passthru // { 43 interpreter = "${env}/bin/${python.executable}"; 44 inherit python; 45 env = stdenv.mkDerivation { 46 name = "interactive-${python.name}-environment"; 47 nativeBuildInputs = [ env ]; 48 49 buildCommand = '' 50 echo >&2 "" 51 echo >&2 "*** Python 'env' attributes are intended for interactive nix-shell sessions, not for building! ***" 52 echo >&2 "" 53 exit 1 54 ''; 55 }; 56 }; 57 }; 58in env