about summary refs log tree commit diff
path: root/pkgs/development
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2020-01-13 21:45:24 +0100
committerFrederik Rietdijk <freddyrietdijk@fridh.nl>2020-01-14 22:36:21 +0100
commiteba1f794184f6bc08558a6506ed62eada008f37e (patch)
tree5e3bbaa1908dc7eae5d5fdfeecf509ef110fa942 /pkgs/development
parentece829033b7b8f4e81261fef5427144df4147bc4 (diff)
downloadnixlib-eba1f794184f6bc08558a6506ed62eada008f37e.tar
nixlib-eba1f794184f6bc08558a6506ed62eada008f37e.tar.gz
nixlib-eba1f794184f6bc08558a6506ed62eada008f37e.tar.bz2
nixlib-eba1f794184f6bc08558a6506ed62eada008f37e.tar.lz
nixlib-eba1f794184f6bc08558a6506ed62eada008f37e.tar.xz
nixlib-eba1f794184f6bc08558a6506ed62eada008f37e.tar.zst
nixlib-eba1f794184f6bc08558a6506ed62eada008f37e.zip
pythonPackages.venvShellHook: init
This is a hook that loads a virtualenv from the specified `venvDir`
location. If the virtualenv does not exist, it is created.
Diffstat (limited to 'pkgs/development')
-rw-r--r--pkgs/development/interpreters/python/hooks/default.nix12
-rw-r--r--pkgs/development/interpreters/python/hooks/venv-shell-hook.sh26
2 files changed, 38 insertions, 0 deletions
diff --git a/pkgs/development/interpreters/python/hooks/default.nix b/pkgs/development/interpreters/python/hooks/default.nix
index f05b3b1eec63..159637ae9d5f 100644
--- a/pkgs/development/interpreters/python/hooks/default.nix
+++ b/pkgs/development/interpreters/python/hooks/default.nix
@@ -2,6 +2,9 @@
 { python
 , callPackage
 , makeSetupHook
+, disabledIf
+, isPy3k
+, ensureNewerSourcesForZipFilesHook
 }:
 
 let
@@ -109,6 +112,15 @@ in rec {
       };
     } ./setuptools-check-hook.sh) {};
 
+  venvShellHook = disabledIf (!isPy3k) (callPackage ({ }:
+    makeSetupHook {
+      name = "venv-shell-hook";
+      deps = [ ensureNewerSourcesForZipFilesHook ];
+      substitutions = {
+        inherit pythonInterpreter;
+    };
+  } ./venv-shell-hook.sh) {});
+
   wheelUnpackHook = callPackage ({ wheel }:
     makeSetupHook {
       name = "wheel-unpack-hook.sh";
diff --git a/pkgs/development/interpreters/python/hooks/venv-shell-hook.sh b/pkgs/development/interpreters/python/hooks/venv-shell-hook.sh
new file mode 100644
index 000000000000..3185b1f9fae9
--- /dev/null
+++ b/pkgs/development/interpreters/python/hooks/venv-shell-hook.sh
@@ -0,0 +1,26 @@
+venvShellHook() {
+    echo "Executing venvHook"
+    runHook preShellHook
+
+    if [ -d "${venvDir}" ]; then
+      echo "Skipping venv creation, '${venvDir}' already exists"
+    else
+      echo "Creating new venv environment in path: '${venvDir}'"
+      @pythonInterpreter@ -m venv "${venvDir}"
+    fi
+
+    source "${venvDir}/bin/activate"
+
+    runHook postShellHook
+    echo "Finished executing venvShellHook"
+}
+
+if [ -z "${dontUseVenvShellHook:-}" ] && [ -z "${shellHook-}" ]; then
+    echo "Using venvShellHook"
+    if [ -z "${venvDir-}" ]; then
+        echo "Error: \`venvDir\` should be set when using \`venvShellHook\`."
+        exit 1
+    else
+        shellHook=venvShellHook
+    fi
+fi