Last active
March 17, 2024 05:21
-
-
Save dbtek/fb2ddccb18f0cf63a654ea2cc94c8f19 to your computer and use it in GitHub Desktop.
Python 3 venv wrapper. Manages all virtual environments under ~/.venv/ .
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# venv_wrapper, manage all virtual environments under ~/.venv/ | |
# Include following in .bashrc / .bash_profile / .zshrc | |
# See https://gist.github.com/dbtek/fb2ddccb18f0cf63a654ea2cc94c8f19 | |
# 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 | |
echo "Creating venv under $VENV_HOME/$1" | |
python3 -m venv $VENV_HOME/$1 | |
echo "Activating $1" | |
venv $1 | |
fi | |
} | |
rmvenv() { | |
if [ $# -eq 0 ] | |
then | |
echo "Please provide venv name" | |
else | |
rm -rf $VENV_HOME/$1 | |
fi | |
} | |
complete -C lsvenv venv | |
complete -C lsvenv rmvenv |
the ZSH equivalent for @leoschmitz 's one liner above is
compdef '_path_files -/ -W $VENV_HOME' venv
Autocompletion added for venv
and rmvenv
commands. Thanks @leoschmitz, @billyzs.
Auto activating newly created venv with mkvenv
is also added along with some informative messages.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.