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

了解一下 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

 

来源:公众号如何涨粉

原文地址:https://www.cnblogs.com/a5651651616/p/12233645.html

时间: 2024-10-11 12:53:14

setV:一个管理 Python 虚拟环境的 Bash 函数的相关文章

如何用anaconda管理python虚拟环境

1.下载安装miniconda 下载miniconda 因为Anaconda的安装包太大了(最新版的Anaconda3-5.3.1足足有630多MB),所以我们在这里只安装miniconda. 如果你对自己的网速比较有自信可以试试从官网下载miniconda官网 不过我还是建议你从国内的网站下载,清华源就是一个比较好的镜像网站上面也有很多其他资源,在这里就不赘述了.直接放上下载传送门 Miniconda3-latest-Windows-x86_64不过需要注意的是这个链接是64位的,如果你的计算

Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了

前言 Python虚拟环境是一个虚拟化,从电脑独立开辟出来的环境.在这个虚拟环境中,我们可以pip安装各个项目不同的依赖包,从全局中隔离出来,利于管理. 传统的Python虚拟环境有virtualenv,使用pip freeze → requirements.txt 导出依赖.现在又有了一个新神器 -- Pipenv, 它是由大名鼎鼎的requests 作者 Kenneth Reitz 写的一个命令行工具,这个工具包装了virtualenv,使用Pipfile和Pipfile.lock管理,更加

如何用python的装饰器定义一个像C++一样的强类型函数

Python作为一个动态的脚本语言,其函数在定义时是不需要指出参数的类型,也不需要指出函数是否有返回值.本文将介绍如何使用python的装饰器来定义一个像C++那样的强类型函数.接下去,先介绍python3中关于函数的定义. 0. python3中的函数定义 举个例子来说吧,比如如下的函数定义: 1 def fun(a:int, b=1, *c, d, e=2, **f) -> str: 2 pass 这里主要是说几点与python2中不同的点. 1)分号后面表示参数的annotation,这个

python虚拟环境virtualenv安装和配置

http://blog.csdn.net/pipisorry/article/details/47008981 python虚拟环境virtualenv VirtualEnv用于在一台机器上创建多个独立的python运行环境,VirtualEnvWrapper为前者提供了一些便利的命令行上的封装. Virtualenv是一个非常好的virtual python environment builder,他最大的好处是,可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也

使用 pyenv 管理 Python 版本

http://einverne.github.io/post/2017/04/pyenv.html Posted on 04/22/2017 by Ein Verne | View revision history 记录一下使用过程,留备以后使用. pyenv 是 Python 版本管理工具. pyenv 可以改变全局的 Python 版本,安装多个版本的 Python, 设置目录级别的 Python 版本,还能创建和管理 virtual python environments .所有的设置都是

7.python虚拟环境详解

1.为什么创建虚拟环境? 和其他大多数现代编程语言一样,Python对包和模块的下载.存储以及管理有其自己的一套方法,Python的包一般都存在几个特定的地方,大部分系统包会存在sys.prefix指定的路径下:大部分第三方包,比如easy_install或pip会将包存放在site-packages所指定的路径下. Python应用程序通常会使用不在标准库内的软件包和模块,应用程序有时需要特定版本的库,由于Python导入模块不能区分模块版本,这意味着一个Python安装可能无法满足每个应用程

python虚拟环境模块venv

相信只要学习python的同学对于虚拟环境这个概念肯定不会太陌生,虚拟环境指的是一个个单独隔离的python开发环境.各个虚拟环境之间互不干扰,都有自己独立的开发包.就像是在电脑上装了很多个虚拟机,每个虚拟机里面你随便折腾,不会影响到物理机,也不会影响到其他虚拟机. 既然这么有用,那么Python里面用来创建虚拟环境的模块virtualenv是怎么使用的呢?我们一起来看一下. virtualenv基本命令格式 这个模块比较简单,它只有一条命令,但是跟的选项比较多,就是通过不同的选项来控制生成不同

ubuntu 下搭建一个python3的虚拟环境(用于django配合postgresql数据库开发)

#安装python pip  (在物理环境中安装) sudo apt-get install python-pip       sudo apt-get install python3-pipsudo pip install --upgrade pipsudo pip3 install --upgrade pip 备注说明: python-pip 是python2版本的包管理工具   , python3-pip是python3版本的包管理工具 ,  如果你创建了一个python2的虚拟环境 ,当

安装独立Python虚拟环境:virtualenv

virtualenv  Python有着庞大的开源社区的支持,很自然就产生这么一个问题:第三方包参差不齐,如果我们想在服务器测试,或者升级某个包,就会导致生产环境产生杂乱,多余的第三方依赖包. virtualenv就是来解决这个问题的,virtualenv可以生成多个的Python环境,各个环境相互独立,互不影响,且和正式环境一模一样. 1.安装 pip install virtualenv 2.用法: (1)virtualenv ENV 该命令会创建一个安装包存放目录:ENV/lib/pyth