了解一下 setV,它是一个轻量级的 Python 虚拟环境管理器,是 virtualenvwrapper 的替代产品。
这一年多来,我的 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) iclcoolster@gmail.com
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():
#
Now you can ‘activate’ the virtual environment by typing
$ setv
#
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 newvirtualenvname
#
To delete existing virtual environment:
$ setv –delete existingvirtualenvname
#
To deactivate, type:
$ deactivate
Path to virtual environment directory
SETVVIRTUALDIR_PATH=”$HOME/virtualenvs/”
Default python version to use. This decides whether to use virtualenv
or python3 -m venv
SETVPYTHONVERSION=3 # Defaults to Python3
SETVPYPATH=$(which python${SETVPYTHONVERSION})
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 command
local word=${COMP_WORDS[COMP_CWORD]} # Words thats being completed
local 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 names
COMPREPLY=($(compgen -W "$names" -X "$xpat" -- "$word")) # compgen generates the results
}
function setvhelp_() {
# Echo help/usage message
echo “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 NAME Delete existing Python Virtual Env.”
echo -e “-p, –python PATH Python binary path.”
}
function setvcustompythonpath()
{
if [ -f “${1}” ];
then
if [ “expr $1 : '.*python\([2,3]\)'
” = “3” ];
then
SETVPYTHONVERSION=3
else
SETVPYTHONVERSION=2
fi
SETVPYPATH=${1}
setvcreate $2
else
echo “Error: Path ${1} does not exist!”
fi
}
function setvcreate()
{
# Creates new virtual environment if ran with -n|–new flag
if [ -z ${1} ];
then
echo “You need to pass virtual environment name”
setvhelp_
else
echo “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}
else
virtualenv -p ${SETV_PY_PATH} ${SETV_VIRTUAL_DIR_PATH}${1}
fi
echo "You can now activate the Python virtual environment by typing: setv ${1}"
fi
}
function setvdelete()
{
# Deletes virtual environment if ran with -d|–delete flag
# TODO: Refactor
if [ -z ${1} ];
then
echo “You need to pass virtual environment name”
setvhelp_
else
if [ -d ${SETVVIRTUALDIRPATH}${1} ];
then
read -p “Really delete this virtual environment(Y/N)? ” yesno
case $yesno in
Y|y) rm -rvf ${SETVVIRTUALDIRPATH}${1};;
N|n) echo “Leaving the virtual environment as it is.”;;
*) echo “You need to enter either Y/y or N/n”
esac
else
echo “Error: No virtual environment found by the name: ${1}”
fi
fi
}
function setvlist()
{
# Lists all virtual environments if ran with -l|–list flag
echo -e “List of virtual environments you have under ${SETVVIRTUALDIRPATH}:\n”
for virt in $(ls -l “${SETVVIRTUALDIRPATH}” | egrep ‘^d’ | awk -F ” ” ‘{print $NF}’)
do
echo ${virt}
done
}
function setv() {
# Main function
if [ $# -eq 0 ];
then
setvhelp_
elif [ $# -le 3 ];
then
case “${1}” in
-n|–new) setvcreate ${2};;
-d|–delete) setvdelete ${2};;
-l|–list) setvlist;;
*) if [ -d ${SETVVIRTUALDIRPATH}${1} ];
then
# Activate the virtual environment
source ${SETVVIRTUALDIRPATH}${1}/bin/activate
else
# Else throw an error message
echo “Sorry, you don’t have any virtual environment with the name: ${1}”
setvhelp_
fi
;;
esac
elif [ $# -le 5 ];
then
case “${2}” in
-p|–python) setvcustompythonpath ${3} ${4};;
*) setvhelp_;;
esac
fi
}
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
“`
via: https://opensource.com/article/20/1/setv-bash-function
作者:Sachin Patil 选题:lujun9972 译者:wxy 校对:wxy
主题测试文章,只做测试使用。发布者:eason,转转请注明出处:https://aicodev.cn/2020/01/20/setv%ef%bc%9a%e4%b8%80%e4%b8%aa%e7%ae%a1%e7%90%86-python-%e8%99%9a%e6%8b%9f%e7%8e%af%e5%a2%83%e7%9a%84-bash-%e5%87%bd%e6%95%b0/