virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:
1. 在没有权限的情况下安装新套件
2. 不同应用可以使用不同的套件版本
3. 套件升级不影响其他应用
一、virtualenv的使用
通过pip安装virtualenv:
pip install virtualenv
测试安装:
virtualenv --version
为一个工程项目搭建一个虚拟环境:
cd my_project
virtualenv my_project_env
另外,如果存在多个python解释器,可以选择指定一个Python解释器(比如``python2.7``),没有指定则由系统默认的解释器来搭建:
virtualenv -p /usr/bin/python2.7 my_project_env
将会在当前的目录中创建一个名my_project_env的文件夹,这是一个独立的python运行环境,包含了Python可执行文件, 以及 pip
库的一份拷贝,这样就能安装其他包了,不过已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境来。
如果已经安装了一些第三方库在系统的 site-packages
目录中,希望在新的虚拟环境中也可以使用它们,那么你可以使用 --system-site-packages
选项:
virtualenv --system-site-packages my_project_env
要开始使用虚拟环境,其需要被激活:
linux:
source my_project_env/bin/activate
window 10:
> cd D:\WWW\flask\movie_env\scripts # 先进入启动目录
D:\WWW\flask\movie_env\scripts > ./activate # 启动虚拟机
下提示权限错误信息:
.\activate : 无法加载文件 H:\envproject\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。
有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170
中的about_Execution_Policies。所在位置 行:1 字符: 1
解决办法:
1.以管理员身份打开PowerShell
2.执行命令 set-executionpolicy remotesigned
停用虚拟环境:停用后将回到系统默认的Python解释器
deactivate
删除:
删除虚拟机可以直接删除目录:rm -rf my_project_env
二、virtualenvwrapper 虚拟环境集中管理库
virtualenvwrapper
是一个基于 virtualenv
之上的工具,它将所有的虚拟环境集中起来管理。
2.1、安装
pip install virtualenvwrapper # 命令会自动安装 virtualenvwrapper 及其依赖包 virtualenv, virtualenv-clone。
virtualenvwrapper
默认将所有虚拟环境放在 ~/.virtualenvs
目录下管理,可以修改环境变量 WORKON_HOME
来指定虚拟环境的保存目录。
2.2、启动
source /usr/local/python/bin/virtualenvwrapper.sh
# 运行命令来启用 virtualenvwrapper;virtualenvwrapper.sh 在 python 安装目录下
可以将该命令添加到 ~/.bashrc
或 ~/.profile
等 shell 启动文件中,以便登录 shell 后可以直接使用 virtualenvwrapper
提供的命令。
启动时报错:
/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.
错误原因:是因为系统中存在两个或多个 python 的版本,如果是使用的 python 3.x 就需要修改环境变量参数,这里默认的是python 3。
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
2.3、用法
1. 创建虚拟环境
mkvirtualenv env
命令表示在 WORKON_HOME
目录下创建了一个 env
虚拟环境。
2. 启动虚拟环境
workon env
命令表示启用了 env
虚拟环境。workon
命令会自动停用当前所处的虚拟环境(如果存在的话)然后启动指定的虚拟环境,这样你就可以快速在各个虚拟环境之间切换。另外 workon
命令还提供了虚拟环境名称自动补完功能以帮助你选择虚拟环境。
3. 退出虚拟环境
执行 deactivate
命令退出虚拟环境。
4. 删除虚拟环境
执行 rmvirtualenv env
命令删除 env
虚拟环境。
5. 其他命令
lsvirtualenv
显示所有虚拟环境。cdvirtualenv
跳转至当前虚拟环境目录,方便查看虚拟环境的site-packages
目录。cdsitepackages
直接跳转至当前虚拟环境的site-packages
目录。lssitepackages
显示当前虚拟环境的site-packages
目录内容。
三、autoenv 库
autoenv
可以让你进入一个含有 .env
文件的目录时,自动执行 .env
文件来设置系统环境。
如果进入某个项目目录时自动激活它所对应的虚拟环境,那么可以在 .env
文件中配置激活期待的虚拟环境。
3.1、安装
pip install autoenv # 命令自动安装 autoenv 工具。
3.2、启动
source /usr/local/opt/autoenv/activate.sh
可以将该命令添加到 ~/.bashrc
等 shell 启动文件中。
3.3、用法
为项目设置特定的系统环境,那么可以在项目根目录下面新建一个 .env
文件,将所需设定的系统环境写在 .env
文件中。
当启用 autoenv
后,它会自动执行 .env
文件。
例如进入 workspaces
目录自动退出虚拟环境,编辑 workspaces/.env
添加以下内容:
BASE_PATH=`dirname "${BASH_SOURCE}"`
PWD=`pwd`
if [[ "${BASE_PATH}" == "${PWD}" ]]
then
declare -f -F deactivate &>/dev/null
if [[ "${?}" == "0" ]]
then
deactivate
fi
fi
又例如进入 workspaces/project
目录自动激活虚拟环境,编辑 workspaces/project/.env
添加以下内容:
BASE_PATH=`dirname "${BASH_SOURCE}"`
PWD=`pwd`
if [[ "${BASE_PATH}" == "${PWD}" ]]
then
if [[ -e bin/activate ]]
then
source bin/activate
fi
fi