了解一下 setV, 它是一个轻量级的 Python 虚拟环境管理器, 是 virtualenvwrapper 的替代产品.-- Sachin Patil(作者)
这一年多来, 我的 bash_scripts 项目中悄悄隐藏这 setV , 但现在是时候该公开了. setV 是一个 Bash 函数, 我可以用它代替 virtualenvwrapper . 它提供了使你能够执行以下操作的基本功能:
默认使用 Python 3
创建一个新的虚拟环境
使用带有 -p(或 --python)的自定义 Python 路径来创建新的虚拟环境
删除现有的虚拟环境
列出所有现有的虚拟环境
使用制表符补全(以防你忘记虚拟环境名称)
安装
要安装 setV, 请下载该脚本:
curl https://gitlab.com/psachin/setV/raw/master/install.sh
审核一下脚本, 然后运行它:
sh ./install.sh
当安装 setV 时, 安装脚本会要求你引入 (source) 一下 ~/.bashrc 或 ~/.bash_profile 的配置, 根据你的喜好选择一个.
用法
基本的命令格式是 setv.
创建虚拟环境
setv --new rango # setv -n rango# 或使用定制的 Python 路径 setv --new --python /opt/python/python3 rango # setv -n -p /opt/python/python3 rango
激活已有的虚拟环境
- setv VIRTUAL_ENVIRONMENT_NAME
- # 示例 setv rango
列出所有的虚拟环境
setv --list# 或 setv [TAB] [TAB]
删除虚拟环境
setv --delete rango
切换到另外一个虚拟环境
# 假设你现在在'rango', 切换到'tango'setv tango
制表符补完
如果你不完全记得虚拟环境的名称, 则 Bash 式的制表符补全也可以适用于虚拟环境名称.
参与其中
setV 在 GNU GPLv3 下开源, 欢迎贡献. 要了解更多信息, 请访问它的 GitLab 存储库中的 setV 的 README 的贡献部分.
setV 脚本
#!/usr/bin/env bash# setV - A Lightweight Python virtual environment manager.# Author: Sachin (psachin) <[email protected]># Author's URL: https://psachin.gitlab.io/about## License: GNU GPL v3, See LICENSE file## Configure(Optional):# Set `SETV_VIRTUAL_DIR_PATH` value to your virtual environments# directory-path. By default it is set to'~/virtualenvs/'## Usage:# Manual install: Added below line to your .bashrc or any local rc script():# ---# source /path/to/virtual.sh# ---## Now you can'activate'the virtual environment by typing# $ setv <YOUR VIRTUAL ENVIRONMENT NAME>## For example:# $ setv rango## or type:# setv [TAB] [TAB](to list all virtual envs)## To list all your virtual environments:# $ setv --list## To create new virtual environment:# $ setv --new new_virtualenv_name## To delete existing virtual environment:# $ setv --delete existing_virtualenv_name## To deactivate, type:# $ deactivate# Path to virtual environment directorySETV_VIRTUAL_DIR_PATH="$HOME/virtualenvs/"# Default python version to use. This decides whether to use `virtualenv` or `python3 -m venv`SETV_PYTHON_VERSION=3# Defaults to Python3SETV_PY_PATH=$(which python${SETV_PYTHON_VERSION})function _setvcomplete_(){# Bash-autocompletion.# This ensures Tab-auto-completions work for virtual environment names.local cmd="${1##*/}"# to handle command(s). # Not necessary as such.'setv'is the only commandlocal word=${COMP_WORDS[COMP_CWORD]} # Words thats being completedlocal xpat='${Word}'# Filter pattern. Include # only words in variable'$names'local names=$(ls -l"${SETV_VIRTUAL_DIR_PATH}"| egrep'^d'| awk -F" "'{print $NF}') # Virtual environment namesCOMPREPLY=($(compgen -W "$names" -X "$xpat" -- "$word")) # compgen generates the results}function _setv_help_() {# Echo help/usage messageecho "Usage: setv [OPTIONS] [NAME]"echo Positional argument:echo -e "NAME Activate virtual env."echo Optional arguments:echo -e "-l, --list List all Virtual Envs."echo -e "-n, --new NAME Create a new Python Virtual Env."echo -e "-d, --delete NAMEDelete existing Python Virtual Env."echo -e "-p, --python PATHPython binary path."}function _setv_custom_python_path(){if [ -f "${1}" ];thenif [ "`expr $1 :'.*python\([2,3]\)'`" = "3" ];thenSETV_PYTHON_VERSION=3elseSETV_PYTHON_VERSION=2fiSETV_PY_PATH=${1}_setv_create $2elseecho "Error: Path ${1} does not exist!"fi}function _setv_create(){# Creates new virtual environment if ran with -n|--new flagif [ -z ${1} ];thenecho "You need to pass virtual environment name"_setv_help_elseecho "Creating new virtual environment with the name: $1"if [ ${SETV_PYTHON_VERSION} -eq 3 ];then${SETV_PY_PATH} -m venv ${SETV_VIRTUAL_DIR_PATH}${1}elsevirtualenv -p ${SETV_PY_PATH} ${SETV_VIRTUAL_DIR_PATH}${1}fiecho "You can now activate the Python virtual environment by typing: setv ${1}"fi}function _setv_delete(){# Deletes virtual environment if ran with -d|--delete flag# TODO: Refactorif [ -z ${1} ];thenecho "You need to pass virtual environment name"_setv_help_elseif [ -d ${SETV_VIRTUAL_DIR_PATH}${1} ];thenread -p "Really delete this virtual environment(Y/N)?" yes_nocase $yes_no inY|y) rm -rvf ${SETV_VIRTUAL_DIR_PATH}${1};;N|n) echo "Leaving the virtual environment as it is.";;*) echo "You need to enter either Y/y or N/n"esacelseecho "Error: No virtual environment found by the name: ${1}"fifi}function _setv_list(){# Lists all virtual environments if ran with -l|--list flagecho -e "List of virtual environments you have under ${SETV_VIRTUAL_DIR_PATH}:\n"for virt in $(ls -l "${SETV_VIRTUAL_DIR_PATH}" | egrep '^d' | awk -F ""'{print $NF}')doecho ${virt}done}function setv() {# Main functionif [ $# -eq 0 ];then_setv_help_elif [ $# -le 3 ];thencase"${1}"in-n|--new) _setv_create ${2};;-d|--delete) _setv_delete ${2};;-l|--list) _setv_list;;*) if [ -d ${SETV_VIRTUAL_DIR_PATH}${1} ]; then # Activate the virtual environment source ${SETV_VIRTUAL_DIR_PATH}${1}/bin/activate else # Else throw an error message echo"Sorry, you don't have any virtual environment with the name: ${1}" _setv_help_ fi ;;esacelif [ $# -le 5 ];thencase "${2}" in-p|--python) _setv_custom_python_path ${3} ${4};;*) _setv_help_;;esacfi}# Calls bash-complete. The compgen command accepts most of the same# options that complete does but it generates results rather than just# storing the rules for future use.complete-F _setvcomplete_ setv
来源: http://www.bubuko.com/infodetail-3394675.html