diff --git a/pkgs/development/python-modules/generic/default.nix b/pkgs/development/python-modules/generic/default.nix index 4e0b61002316..6e8794103bc2 100644 --- a/pkgs/development/python-modules/generic/default.nix +++ b/pkgs/development/python-modules/generic/default.nix @@ -20,6 +20,20 @@ , installCommand ? '' easy_install --prefix="$out" . + + # A pth file might have been generated to load the package from + # within its own site-packages, rename this package not to + # collide with others. + eapth="$out/lib/${python.libPrefix}"/site-packages/easy-install.pth + if [ -e "$eapth" ]; then + # move colliding easy_install.pth to specifically named one + mv "$eapth" $(dirname "$eapth")/${name}.pth + fi + + # Remove any site.py files generated by easy_install as these + # cause collisions. If pth files are to be processed a + # corresponding site.py needs to be included in the PYTHONPATH. + rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py* '' , buildPhase ? "true" @@ -45,6 +59,8 @@ python.stdenv.mkDerivation (attrs // { buildInputs = [ python wrapPython setuptools ] ++ buildInputs ++ pythonPath; + buildInputStrings = map toString buildInputs; + pythonPath = [ setuptools] ++ pythonPath; # XXX: Should we run `easy_install --always-unzip'? It doesn't seem @@ -62,7 +78,7 @@ python.stdenv.mkDerivation (attrs // { postFixup = '' wrapPythonPrograms - + # If a user installs a Python package, she probably also wants its # dependencies in the user environment (since Python modules don't # have something like an RPATH, so the only way to find the @@ -70,5 +86,12 @@ python.stdenv.mkDerivation (attrs // { if test -e $out/nix-support/propagated-build-inputs; then ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages fi + + createBuildInputsPth build-inputs "$buildInputStrings" + for inputsfile in propagated-build-inputs propagated-build-native-inputs; do + if test -e $out/nix-support/$inputsfile; then + createBuildInputsPth $inputsfile "$(cat $out/nix-support/$inputsfile)" + fi + done ''; }) diff --git a/pkgs/development/python-modules/generic/wrap.sh b/pkgs/development/python-modules/generic/wrap.sh index 65f3229ca7c4..71269945d6f4 100644 --- a/pkgs/development/python-modules/generic/wrap.sh +++ b/pkgs/development/python-modules/generic/wrap.sh @@ -45,3 +45,16 @@ _addToPythonPath() { done fi } + +createBuildInputsPth() { + local category="$1" + local inputs="$2" + if [ foo"$inputs" != foo ]; then + for x in $inputs; do + if test -d "$x"/lib/@libPrefix@/site-packages; then + echo $x/lib/@libPrefix@/site-packages \ + >> "$out"/lib/@libPrefix@/site-packages/${name}-nix-python-$category.pth + fi + done + fi +}