From 6def5d5517c0272e627d4a98c208475f96828e3c Mon Sep 17 00:00:00 2001 From: Hristo Filaretov Date: Thu, 5 Aug 2021 11:07:46 +0200 Subject: [PATCH] Add Windows support for venv As with the Conda script, a few differences have to be considered when activating on Windows, namely that the correct env var is Path and the directory containing the executables is "Scripts", not "bin" --- virtual_environments/venv.nu | 28 ++++++++++++++++++------- virtual_environments/venv_deactivate.nu | 3 ++- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/virtual_environments/venv.nu b/virtual_environments/venv.nu index 64f26e7..c93ddcc 100644 --- a/virtual_environments/venv.nu +++ b/virtual_environments/venv.nu @@ -1,12 +1,25 @@ -def venv [name] { - let venv-path = ($name | path expand) - let venv-bin-path = ([$venv-path "bin"] | path join) +def venv [venv-dir] { + let venv-abs-dir = ($venv-dir | path expand) + let venv-name = ($venv-abs-dir | path basename) let old-path = ($nu.path | str collect (path-sep)) - let new-path = ($nu.path | prepend $venv-bin-path | str collect (path-sep)) - [[name, value]; - [PATH $new-path] + let new-path = (if (windows?) { (venv-path-windows $venv-abs-dir) } { (venv-path-unix $venv-abs-dir) }) + let new-env = [[name, value]; [VENV_OLD_PATH $old-path] - [VIRTUAL_ENV $venv-path]] + [VIRTUAL_ENV $venv-name]] + + $new-env | append $new-path +} + +def venv-path-unix [venv-dir] { + let venv-path = ([$venv-dir "bin"] | path join) + let new-path = ($nu.path | prepend $venv-path | str collect (path-sep)) + [[name, value]; [PATH $new-path]] +} + +def venv-path-windows [venv-dir] { + let venv-path = ([$venv-dir "Scripts"] | path join) + let new-path = ($nu.path | prepend $venv-path | str collect (path-sep)) + [[name, value]; [Path $new-path]] } def windows? [] { @@ -16,4 +29,3 @@ def windows? [] { def path-sep [] { if (windows?) { ";" } { ":" } } - diff --git a/virtual_environments/venv_deactivate.nu b/virtual_environments/venv_deactivate.nu index 64cec01..95cdd11 100644 --- a/virtual_environments/venv_deactivate.nu +++ b/virtual_environments/venv_deactivate.nu @@ -1,3 +1,4 @@ -let-env PATH = $nu.env.VENV_OLD_PATH +let path-name = (if ((sys).host.name == "Windows") { "Path" } { "PATH" }) +let-env $path-name = $nu.env.VENV_OLD_PATH unlet-env VIRTUAL_ENV unlet-env VENV_OLD_PATH