Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at 20.09 2.0 kB view raw
1{ stdenv, python, buildEnv, makeWrapper 2, extraLibs ? [] 3, extraOutputsToInstall ? [] 4, postBuild ? "" 5, ignoreCollisions ? false 6, permitUserSite ? false 7, requiredPythonModules 8# Wrap executables with the given argument. 9, makeWrapperArgs ? [] 10, }: 11 12# Create a python executable that knows about additional packages. 13let 14 env = let 15 paths = requiredPythonModules (extraLibs ++ [ python ] ) ; 16 pythonPath = "${placeholder "out"}/${python.sitePackages}"; 17 pythonExecutable = "${placeholder "out"}/bin/${python.executable}"; 18 in buildEnv { 19 name = "${python.name}-env"; 20 21 inherit paths; 22 inherit ignoreCollisions; 23 extraOutputsToInstall = [ "out" ] ++ extraOutputsToInstall; 24 25 postBuild = '' 26 . "${makeWrapper}/nix-support/setup-hook" 27 28 if [ -L "$out/bin" ]; then 29 unlink "$out/bin" 30 fi 31 mkdir -p "$out/bin" 32 33 for path in ${stdenv.lib.concatStringsSep " " paths}; do 34 if [ -d "$path/bin" ]; then 35 cd "$path/bin" 36 for prg in *; do 37 if [ -f "$prg" ]; then 38 rm -f "$out/bin/$prg" 39 if [ -x "$prg" ]; then 40 makeWrapper "$path/bin/$prg" "$out/bin/$prg" --set NIX_PYTHONPREFIX "$out" --set NIX_PYTHONEXECUTABLE ${pythonExecutable} --set NIX_PYTHONPATH ${pythonPath} ${if permitUserSite then "" else ''--set PYTHONNOUSERSITE "true"''} ${stdenv.lib.concatStringsSep " " makeWrapperArgs} 41 fi 42 fi 43 done 44 fi 45 done 46 '' + postBuild; 47 48 inherit (python) meta; 49 50 passthru = python.passthru // { 51 interpreter = "${env}/bin/${python.executable}"; 52 inherit python; 53 env = stdenv.mkDerivation { 54 name = "interactive-${python.name}-environment"; 55 nativeBuildInputs = [ env ]; 56 57 buildCommand = '' 58 echo >&2 "" 59 echo >&2 "*** Python 'env' attributes are intended for interactive nix-shell sessions, not for building! ***" 60 echo >&2 "" 61 exit 1 62 ''; 63 }; 64 }; 65 }; 66in env