From 0045164b1517419fdfbd3c5cec2eadb7aae9088a Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Wed, 21 Nov 2018 23:20:38 -0700 Subject: [PATCH 1/2] Add flag to disable PYTHONNOUSERSITE for wrapped python binaries --- .../development/interpreters/python/mk-python-derivation.nix | 4 ++++ pkgs/development/interpreters/python/wrap.sh | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/python/mk-python-derivation.nix b/pkgs/development/interpreters/python/mk-python-derivation.nix index 4951ae4499f..46ba7765cdc 100644 --- a/pkgs/development/interpreters/python/mk-python-derivation.nix +++ b/pkgs/development/interpreters/python/mk-python-derivation.nix @@ -46,6 +46,9 @@ # Skip wrapping of python programs altogether , dontWrapPythonPrograms ? false +# Skip setting the PYTHONNOUSERSITE environment variable in wrapped programs +, skipNoUserSite ? false + # Remove bytecode from bin folder. # When a Python script has the extension `.py`, bytecode is generated # Typically, executables in bin have no extension, so no bytecode is generated. @@ -93,6 +96,7 @@ let self = toPythonModule (python.stdenv.mkDerivation (builtins.removeAttrs attr installCheckInputs = checkInputs; postFixup = lib.optionalString (!dontWrapPythonPrograms) '' + ${if skipNoUserSite then "export SKIPNOUSERSITE=1" else ""} wrapPythonPrograms '' + lib.optionalString removeBinBytecode '' if [ -d "$out/bin" ]; then diff --git a/pkgs/development/interpreters/python/wrap.sh b/pkgs/development/interpreters/python/wrap.sh index b2d65422db4..d779826cf81 100644 --- a/pkgs/development/interpreters/python/wrap.sh +++ b/pkgs/development/interpreters/python/wrap.sh @@ -73,9 +73,12 @@ wrapPythonProgramsIn() { # (see pkgs/build-support/setup-hooks/make-wrapper.sh) local -a wrap_args=("$f" --prefix PATH ':' "$program_PATH" - --set PYTHONNOUSERSITE "true" ) + if [ -z "$SKIPNOUSERSITE" ]; then + wrap_args+=(--set PYTHONNOUSERSITE "true") + fi + # Add any additional arguments provided by makeWrapperArgs # argument to buildPythonPackage. local -a user_args="($makeWrapperArgs)" From a3f24daa7bc52767e15b5476d6c6b4165db5ee39 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 6 Dec 2018 15:18:59 -0800 Subject: [PATCH 2/2] Add flag to disable PYTHONNOUSERSITE for wrapped binaries in python environments --- pkgs/development/interpreters/python/mk-python-derivation.nix | 3 +-- pkgs/development/interpreters/python/wrap.sh | 2 +- pkgs/development/interpreters/python/wrapper.nix | 3 ++- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/development/interpreters/python/mk-python-derivation.nix b/pkgs/development/interpreters/python/mk-python-derivation.nix index 46ba7765cdc..065c10f771e 100644 --- a/pkgs/development/interpreters/python/mk-python-derivation.nix +++ b/pkgs/development/interpreters/python/mk-python-derivation.nix @@ -47,7 +47,7 @@ , dontWrapPythonPrograms ? false # Skip setting the PYTHONNOUSERSITE environment variable in wrapped programs -, skipNoUserSite ? false +, permitUserSite ? false # Remove bytecode from bin folder. # When a Python script has the extension `.py`, bytecode is generated @@ -96,7 +96,6 @@ let self = toPythonModule (python.stdenv.mkDerivation (builtins.removeAttrs attr installCheckInputs = checkInputs; postFixup = lib.optionalString (!dontWrapPythonPrograms) '' - ${if skipNoUserSite then "export SKIPNOUSERSITE=1" else ""} wrapPythonPrograms '' + lib.optionalString removeBinBytecode '' if [ -d "$out/bin" ]; then diff --git a/pkgs/development/interpreters/python/wrap.sh b/pkgs/development/interpreters/python/wrap.sh index d779826cf81..c7201c7a997 100644 --- a/pkgs/development/interpreters/python/wrap.sh +++ b/pkgs/development/interpreters/python/wrap.sh @@ -75,7 +75,7 @@ wrapPythonProgramsIn() { --prefix PATH ':' "$program_PATH" ) - if [ -z "$SKIPNOUSERSITE" ]; then + if [ -z "$permitUserSite" ]; then wrap_args+=(--set PYTHONNOUSERSITE "true") fi diff --git a/pkgs/development/interpreters/python/wrapper.nix b/pkgs/development/interpreters/python/wrapper.nix index 27d01e4e1f5..5a2ec567b9e 100644 --- a/pkgs/development/interpreters/python/wrapper.nix +++ b/pkgs/development/interpreters/python/wrapper.nix @@ -3,6 +3,7 @@ , extraOutputsToInstall ? [] , postBuild ? "" , ignoreCollisions ? false +, permitUserSite ? false , requiredPythonModules # Wrap executables with the given argument. , makeWrapperArgs ? [] @@ -34,7 +35,7 @@ let if [ -f "$prg" ]; then rm -f "$out/bin/$prg" if [ -x "$prg" ]; then - makeWrapper "$path/bin/$prg" "$out/bin/$prg" --set PYTHONHOME "$out" --set PYTHONNOUSERSITE "true" ${stdenv.lib.concatStringsSep " " makeWrapperArgs} + makeWrapper "$path/bin/$prg" "$out/bin/$prg" --set PYTHONHOME "$out" ${if permitUserSite then "" else ''--set PYTHONNOUSERSITE "true"''} ${stdenv.lib.concatStringsSep " " makeWrapperArgs} fi fi done