I do very much python programming and I use the fish shell as the main interface to my computer. What is the easiest way to integrate some virtualenv management in fish? There are some shellscripts available for zsh or bash, but as always they are too bloated; in other words I do not need 99% of the provided functionality. I even do not know whether these scripts (the most noted may be virtualenvwrapper) are available for fish.
|I am too lazy to explain what a virtualenv is. When you do not know what that is, this article won’t help.|
What does the electrical engineer do? He creates his own script… It turns out, that this is really simple. Since I am a nice person, I share it with the internet (say thanks internet!).
function venv switch (echo $argv) case "create" python3 -m venv "$HOME/.venvs/$argv" case "use" source "$HOME/.venvs/$argv/bin/activate.fish" case "*" echo "usage: venv create|use VENV" end end function venv2 switch (echo $argv) case "create" python2 -m venv "$HOME/.venvs2/$argv" case "use" source "$HOME/.venvs2/$argv/bin/activate.fish" case "*" echo "usage: venv2 create|use VENV" end end
Fish is able to autoload functions. You only have to place a file in the
$HOME/.config/fish/functions containing the functions.
I have create two functions, one for python2 (although I don’t use it) and
one for python3.
The following examples show the simple usage of these functions:
$ venv create testenv $ venv use testenv (testenv) $
Currently there seems to be a bug, since it generates a syntactically wrong
fish script. You have to fix line 58 in the generated fish script
To disable a virtualenv just type
deactivate. To remove a virtualenv remove the
$HOME/.venvs/VIRTUALENV. There is no need for bloated wrapper scripts.