diff --git a/pkgs/development/python-modules/virtualenvwrapper/default.nix b/pkgs/development/python-modules/virtualenvwrapper/default.nix new file mode 100644 index 000000000000..4bf1778b9d54 --- /dev/null +++ b/pkgs/development/python-modules/virtualenvwrapper/default.nix @@ -0,0 +1,75 @@ +{ stdenv +, buildPythonPackage +, fetchPypi +, pbr +, pip +, pkgs +, stevedore +, virtualenv +, virtualenv-clone +, python +}: + +buildPythonPackage rec { + pname = "virtualenvwrapper"; + version = "4.3"; + + src = fetchPypi { + inherit pname version; + sha256 = "514cbc22218347bf7b54bdbe49e1a5f550d2d53b1ad2491c10e91ddf48fb528f"; + }; + + # pip depend on $HOME setting + preConfigure = "export HOME=$TMPDIR"; + + buildInputs = [ pbr pip pkgs.which ]; + propagatedBuildInputs = [ stevedore virtualenv virtualenv-clone ]; + + postPatch = '' + for file in "virtualenvwrapper.sh" "virtualenvwrapper_lazy.sh"; do + substituteInPlace "$file" --replace "which" "${pkgs.which}/bin/which" + + # We can't set PYTHONPATH in a normal way (like exporting in a wrapper + # script) because the user has to evaluate the script and we don't want + # modify the global PYTHONPATH which would affect the user's + # environment. + # Furthermore it isn't possible to just use VIRTUALENVWRAPPER_PYTHON + # for this workaround, because this variable is well quoted inside the + # shell script. + # (the trailing " -" is required to only replace things like these one: + # "$VIRTUALENVWRAPPER_PYTHON" -c "import os,[...] and not in + # if-statements or anything like that. + # ...and yes, this "patch" is hacky :) + substituteInPlace "$file" --replace '"$VIRTUALENVWRAPPER_PYTHON" -' 'env PYTHONPATH="$VIRTUALENVWRAPPER_PYTHONPATH" "$VIRTUALENVWRAPPER_PYTHON" -' + done + ''; + + postInstall = '' + # This might look like a dirty hack but we can't use the makeWrapper function because + # the wrapped file were then called via "exec". The virtualenvwrapper shell scripts + # aren't normal executables. Instead, the user has to evaluate them. + + for file in "virtualenvwrapper.sh" "virtualenvwrapper_lazy.sh"; do + local wrapper="$out/bin/$file" + local wrapped="$out/bin/.$file-wrapped" + mv "$wrapper" "$wrapped" + + # WARNING: Don't indent the lines below because that would break EOF + cat > "$wrapper" << EOF +export PATH="${python}/bin:\$PATH" +export VIRTUALENVWRAPPER_PYTHONPATH="$PYTHONPATH:$(toPythonPath $out)" +source "$wrapped" +EOF + + chmod -x "$wrapped" + chmod +x "$wrapper" + done + ''; + + meta = with stdenv.lib; { + description = "Enhancements to virtualenv"; + homepage = "https://pypi.python.org/pypi/virtualenvwrapper"; + license = licenses.mit; + }; + +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 72820917895a..8702d880f0d5 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4089,71 +4089,7 @@ in { virtualenv-clone = callPackage ../development/python-modules/virtualenv-clone { }; - virtualenvwrapper = buildPythonPackage (rec { - name = "virtualenvwrapper-4.3"; - - src = pkgs.fetchurl { - url = "mirror://pypi/v/virtualenvwrapper/${name}.tar.gz"; - sha256 = "514cbc22218347bf7b54bdbe49e1a5f550d2d53b1ad2491c10e91ddf48fb528f"; - }; - - # pip depend on $HOME setting - preConfigure = "export HOME=$TMPDIR"; - - buildInputs = with self; [ pbr pip pkgs.which ]; - propagatedBuildInputs = with self; [ - stevedore - virtualenv - virtualenv-clone - ]; - - postPatch = '' - for file in "virtualenvwrapper.sh" "virtualenvwrapper_lazy.sh"; do - substituteInPlace "$file" --replace "which" "${pkgs.which}/bin/which" - - # We can't set PYTHONPATH in a normal way (like exporting in a wrapper - # script) because the user has to evaluate the script and we don't want - # modify the global PYTHONPATH which would affect the user's - # environment. - # Furthermore it isn't possible to just use VIRTUALENVWRAPPER_PYTHON - # for this workaround, because this variable is well quoted inside the - # shell script. - # (the trailing " -" is required to only replace things like these one: - # "$VIRTUALENVWRAPPER_PYTHON" -c "import os,[...] and not in - # if-statements or anything like that. - # ...and yes, this "patch" is hacky :) - substituteInPlace "$file" --replace '"$VIRTUALENVWRAPPER_PYTHON" -' 'env PYTHONPATH="$VIRTUALENVWRAPPER_PYTHONPATH" "$VIRTUALENVWRAPPER_PYTHON" -' - done - ''; - - postInstall = '' - # This might look like a dirty hack but we can't use the makeWrapper function because - # the wrapped file were then called via "exec". The virtualenvwrapper shell scripts - # aren't normal executables. Instead, the user has to evaluate them. - - for file in "virtualenvwrapper.sh" "virtualenvwrapper_lazy.sh"; do - local wrapper="$out/bin/$file" - local wrapped="$out/bin/.$file-wrapped" - mv "$wrapper" "$wrapped" - - # WARNING: Don't indent the lines below because that would break EOF - cat > "$wrapper" << EOF -export PATH="${python}/bin:\$PATH" -export VIRTUALENVWRAPPER_PYTHONPATH="$PYTHONPATH:$(toPythonPath $out)" -source "$wrapped" -EOF - - chmod -x "$wrapped" - chmod +x "$wrapper" - done - ''; - - meta = { - description = "Enhancements to virtualenv"; - homepage = "https://pypi.python.org/pypi/virtualenvwrapper"; - license = licenses.mit; - }; - }); + virtualenvwrapper = callPackage ../development/python-modules/virtualenvwrapper { }; vmprof = buildPythonPackage rec { version = "0.3.3";