1
0
Fork 0
dotfiles/.local/bin/source/src_venv
2025-11-11 00:41:42 +03:00

71 lines
1.8 KiB
Bash

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"
}
deactivate_or_unset() {
if command -v deactivate >/dev/null 2>&1; then
deactivate
else
unset VIRTUAL_ENV
unset VIRTUAL_ENV_PROMPT
fi
}
remove() {
[ -n "${VIRTUAL_ENV}" ] && deactivate_or_unset
rm -rf "${VENV_FOLDER}"
}
# shellcheck disable=SC1091
create_or_activate() {
if [ ! -d "${VENV_FOLDER}" ]; then
python3 -m venv "${VENV_FOLDER}"
fi
source "${VENV_FOLDER}/bin/activate"
}
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_PATH="$1";;
-*) help; return;;
*) VENV_FOLDER_NAME="$1";;
esac
shift
done
VENV_FOLDER="${VENV_FOLDER_PATH}/${VENV_FOLDER_NAME}"
# shellcheck disable=SC2015
case "${OPERATION}" in
c) [ -z "${VIRTUAL_ENV}" ] && create_or_activate || help >&2;;
d) [ -n "${VIRTUAL_ENV}" ] && deactivate_or_unset || help >&2;;
r) [ -d "${VENV_FOLDER}" ] && remove || help >&2;;
esac
# vim: ft=sh