dotfiles/.local/bin/source/src_venv

62 lines
1.6 KiB
Bash

SCRIPT_PATH="$0"
VENV_FOLDER_PATH="$(dirname ${VIRTUAL_ENV:-./})"
VENV_FOLDER_NAME="$(basename ${VIRTUAL_ENV:-.venv})"
[ -z "${VIRTUAL_ENV}" ] && OPERATION=c || OPERATION=d
help() {
echo "USAGE:"
echo " venv [OPTIONS] [<VENV_FOLDER_PATH>]"
echo
echo "ARGS:"
echo " VENV_FOLDER_PATH Folder containing virtual environment"
echo
echo "OPTIONS:"
echo " -c, --create Create virtual environment"
echo " -d, --deactivate Exit virtual environment"
echo " -f, --folder <name> Specify venv folder name"
echo " -h, --help Print this message"
echo " -r, --remove Deactivate and remove virtual environment"
}
remove() {
[ ! -z "${VIRTUAL_ENV}" ] && deactivate
rm -rf "${VENV_FOLDER}"
}
create_or_activate() {
if [ -d "${VENV_FOLDER}" ]; then
source ${VENV_FOLDER}/bin/activate
else
python3 -m venv "${VENV_FOLDER}"
source ${VENV_FOLDER}/bin/activate
fi
}
while [ "$#" -gt 0 ]; do
case "$1" in
'-c'|'--create') OPERATION=c;;
'-d'|'--deactivate') OPERATION=d; return;;
'-r'|'--remove') OPERATION=r;;
'-f'|'--folder') shift; VENV_FOLDER_NAME="$1";;
-*) help; return;;
*) shift; VENV_FOLDER_PATH="$1";;
esac
shift
done
VENV_FOLDER="${VENV_FOLDER_PATH}/${VENV_FOLDER_NAME}"
case "${OPERATION}" in
c) [ -z "${VIRTUAL_ENV}" ] && create_or_activate || help;;
d) [ ! -z "${VIRTUAL_ENV}" ] && deactivate || help;;
r) [ -d "${VENV_FOLDER}" ] && remove || help;;
esac
# vim: set ft=sh