Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Python 3 venv wrapper. Manages all virtual environments under ~/.venv/ .
# include following in .bashrc / .bash_profile / .zshrc
# usage
# $ mkvenv myvirtualenv # creates venv under ~/.venv/
# $ venv myvirtualenv # activates venv
# $ deactivate # deactivates venv
# $ rmvenv myvirtualenv # removes venv
export VENV_HOME="$HOME/.venv"
[[ -d $VENV_HOME ]] || mkdir $VENV_HOME
lsvenv() {
ls -1 $VENV_HOME
}
venv() {
if [ $# -eq 0 ]
then
echo "Please provide venv name"
else
source "$VENV_HOME/$1/bin/activate"
fi
}
mkvenv() {
if [ $# -eq 0 ]
then
echo "Please provide venv name"
else
python3 -m venv $VENV_HOME/$1
fi
}
rmvenv() {
if [ $# -eq 0 ]
then
echo "Please provide venv name"
else
rm -r $VENV_HOME/$1
fi
}
@dbtek
Copy link
Author

dbtek commented Jul 8, 2019

@maxwellmckinnon you are absolutely right. Any suggestions?

@dbtek
Copy link
Author

dbtek commented Jul 9, 2019

Updated gist with no argument checks. Thanks to maxwellmckinnon.

@Parth576
Copy link

Parth576 commented Jun 13, 2020

So glad I found this when I searched for "venv wrapper", works perfectly. Thanks!

@zekefarwell
Copy link

zekefarwell commented Jul 29, 2020

Thanks for this! I found it handy to add an lsvenv command as well to list the existing virtual environments under ~/.venv/

lsvenv() {
  ls -1 $VENV_HOME
}

@dbtek
Copy link
Author

dbtek commented Aug 13, 2020

Thanks @zekefarwell. Added lsvenv.

@leoschmitz
Copy link

leoschmitz commented Oct 1, 2020

Useful gist 👍 . I added complete -W "`lsvenv`" venv to the end of it so venv can autocomplete with the tab key. It might help you out.

@kuirolo
Copy link

kuirolo commented Mar 29, 2022

This is great! My system version is 3.10 which tends to break things, so I added a few lines so mkvenv can optionally set the version. It's a bit fragile and basic, but it works for my purposes.

mkvenv() {
  if [ $# -eq 0 ]
    then
      echo "Please provide venv name"
  elif [ $# -eq 1 ]
    then
      python3 -m venv $VENV_HOME/$1
  elif [ $# -eq 2 ]
    then
      python$2 -m venv $VENV_HOME/$1
  fi      
}

@billyzs
Copy link

billyzs commented Sep 23, 2022

the ZSH equivalent for @leoschmitz 's one liner above is
compdef '_path_files -/ -W $VENV_HOME' venv

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment