setV:一个管理 Python 虚拟环境的 Bash 函数

了解一下 setV,它是一个轻量级的 Python 虚拟环境管理器,是 virtualenvwrapper 的替代产品。

了解一下 setV,它是一个轻量级的 Python 虚拟环境管理器,是 virtualenvwrapper 的替代产品。

setV:一个管理 Python 虚拟环境的 Bash 函数

这一年多来,我的 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)? ” yes
no
case $yesno in
Y|y) rm -rvf ${SETV
VIRTUALDIRPATH}${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 “${SETV
VIRTUALDIRPATH}” | 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 ${SETV
VIRTUALDIRPATH}${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

本文由 LCTT 原创编译,Linux中国 荣誉推出

主题测试文章,只做测试使用。发布者: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/

(0)
eason的头像eason
上一篇 2020年1月20日
下一篇 2020年1月21日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信