Last active
June 26, 2021 04:26
-
-
Save yasithdev/ad51b1a3eec2ce7a7d991a267b490a5f to your computer and use it in GitHub Desktop.
venv | helper
This file contains hidden or 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() { | |
USAGE_INFO="Usage: venv [ -h | create [ ENV_NAME [ --overwrite ] ] | delete | activate | list | update ]" | |
DIR_ALREADY_EXISTS="A virtual environment / directory already exists with that name. Use --overwrite flag to overwrite it." | |
NOT_IN_VENV="This command is only allowed in a virtual environment." | |
VENV_DIR_NOT_SET="VENV_DIR environment variable is not set." | |
VENV_PYVER_NOT_SET="VENV_PYVER environment variable is not set." | |
VENV_CREATED="Virtual environment created" | |
VENV_DELETED="Virtual environment deleted" | |
VENV_ACTIVATED="Virtual environment activated" | |
VENV_LIST="Available virtual environments: " | |
ARG_HELP="-h" | |
ARG_CREATE="create" | |
ARG_DELETE="delete" | |
ARG_ACTIVATE="activate" | |
ARG_LIST="list" | |
ARG_UPDATE="update" | |
ARG_OVERWRITE="--overwrite" | |
IN_VENV=$(type deactivate 2>/dev/null | head -n 1 | grep -c function) | |
# sanity checks | |
if [ -z "$1" ] || [ "$1" = "$ARG_HELP" ]; then echo "$USAGE_INFO" && echo && return; fi | |
if [ -z "$VENV_DIR" ] || [ -z "$VENV_PYVER" ]; then | |
([ -z "$VENV_DIR" ] && echo "$VENV_DIR_NOT_SET") | |
([ -z "$VENV_PYVER" ] && echo "$VENV_PYVER_NOT_SET") | |
echo | |
return | |
fi | |
# logic | |
if [ "$1" = "$ARG_CREATE" ] && [ ! -z "$2" ]; then | |
[ "$3" = "$ARG_OVERWRITE" ] && rm -rf $VENV_DIR/$2 | |
([ -d "$VENV_DIR/$2" ] && echo $DIR_ALREADY_EXISTS) || (python$VENV_PYVER -m venv $VENV_DIR/$2 && echo "$VENV_CREATED - $2") | |
elif [ "$1" = "$ARG_DELETE" ] && [ ! -z "$2" ]; then | |
[ "$IN_VENV" -eq 1 ] && deactivate | |
rm -rf $VENV_DIR/$2 && echo "$VENV_DELETED - $2" | |
elif [ "$1" = "$ARG_ACTIVATE" ] && [ ! -z "$2" ]; then | |
source $VENV_DIR/$2/bin/activate && echo "$VENV_ACTIVATED - $2" | |
elif [ "$1" = "$ARG_LIST" ]; then | |
echo "$VENV_LIST" && (ls -1 $VENV_DIR | xargs -I {} sh -c 'printf "\t* {} ($($VENV_DIR/{}/bin/python -V | cut -d " " -f 2))\n"') | |
elif [ "$1" = "$ARG_UPDATE" ]; then | |
[ "$IN_VENV" -eq 1 ] && (pip list --format=freeze | cut -d "=" -f 1 | xargs -I {} pip install --upgrade {}) || echo "$NOT_IN_VENV" | |
else | |
echo "$USAGE_INFO" | |
fi | |
echo | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Instructions
source <filename>
)$VENV_DIR
to an existing directory where you want to create your virtual environments in.$VENV_PYVER
to the python version you plan to use. E.g., if you setVENV_PYVER=XXX
, then it runspythonXXX
.Compatibility