From d52e2c7c4133ddeb53600330e4313030c4ac232a Mon Sep 17 00:00:00 2001 From: Florian Friesdorf Date: Sun, 26 Feb 2012 17:23:09 +0000 Subject: [PATCH] prevent distutils during module install from downloading and load pth files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit based on a patch by Cillian de RĂ³iste svn path=/nixpkgs/branches/stdenv-updates/; revision=32583 --- .../python-modules/generic/default.nix | 11 +++++++++- .../offline-distutils/default.nix | 21 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 6 +++++- 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 pkgs/development/python-modules/offline-distutils/default.nix diff --git a/pkgs/development/python-modules/generic/default.nix b/pkgs/development/python-modules/generic/default.nix index 781fc273de4..50653d1abc4 100644 --- a/pkgs/development/python-modules/generic/default.nix +++ b/pkgs/development/python-modules/generic/default.nix @@ -3,7 +3,7 @@ (http://pypi.python.org/pypi/setuptools/), which represents a large number of Python packages nowadays. */ -{ python, setuptools, wrapPython, lib, site }: +{ python, setuptools, wrapPython, lib, site, offlineDistutils }: { name, namePrefix ? "python-" @@ -69,6 +69,15 @@ python.stdenv.mkDerivation (attrs // { buildInputs = [ python wrapPython setuptools ] ++ buildInputs ++ pythonPath; + configurePhase = '' + # do not allow distutils to make downloads, whatever install command is used + export PYTHONPATH="${setuptools}/lib/${python.libPrefix}:$PYTHONPATH" + export PYTHONPATH="${offlineDistutils}/lib/${python.libPrefix}:$PYTHONPATH" + + # enable pth files for dependencies + export PYTHONPATH="${site}/lib/${python.libPrefix}/site-packages:$PYTHONPATH" + ''; + # XXX: I think setuptools is not needed here pythonPath = [ setuptools site ] ++ pythonPath; diff --git a/pkgs/development/python-modules/offline-distutils/default.nix b/pkgs/development/python-modules/offline-distutils/default.nix new file mode 100644 index 00000000000..2ed41b08bb7 --- /dev/null +++ b/pkgs/development/python-modules/offline-distutils/default.nix @@ -0,0 +1,21 @@ +# Used during module installation to prevent easy_install and python +# setup.py install/test from downloading + +{ stdenv, python }: + +stdenv.mkDerivation { + name = "python-offline-distutils-${python.version}"; + + buildInputs = [ python ]; + + unpackPhase = "true"; + installPhase = '' + dst="$out/lib/${python.libPrefix}" + ensureDir $dst/distutils + ln -s ${python}/lib/${python.libPrefix}/distutils/* $dst/distutils/ + cat < $dst/distutils/distutils.cfg +[easy_install] +allow-hosts = None +EOF + ''; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 5abc9bc8020..b8d26e94a9a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -9,7 +9,7 @@ let pythonPackages = python.modules // rec { buildPythonPackage = import ../development/python-modules/generic { inherit (pkgs) lib; - inherit python wrapPython setuptools site; + inherit python wrapPython setuptools site offlineDistutils; }; @@ -24,6 +24,10 @@ let pythonPackages = python.modules // rec { inherit python; }; + offlineDistutils = import ../development/python-modules/offline-distutils { + inherit (pkgs) stdenv; + inherit python; + }; ipython = import ../shells/ipython { inherit (pkgs) stdenv fetchurl;