Python应用程序有时会需要包或者模块的特定版本,如应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本。这意味着只安装其中一个版本可能无法满足每个应用程序的要求,当我们同时开发多个python工程时,不同的工程会将第三方的包存放在相同的路径下。这就意味着,如果有两个工程依赖同一个包,但是所需要的版本却不一样。由于Python无法根据版本来区分包的安装路径,所以就会发生版本冲突。
Python虚拟环境就是为了给不同的工程创建互相独立的运行环境。在虚拟环境下,每一个工程都有自己的依赖包,而与其它的工程无关。不同的虚拟环境中同一个包可以有不同的版本。
创建python虚拟环境的方法有很多, virtualenvwrapper,virtualenv,venv 以及 pipenv 。这里介绍一下他们的区别与联系。
virtualenv同时支持 Python2 和 Python3,而且可以为每个虚拟环境指定 Python 解释器,并选择不继承基础版本的包。官网为: https://virtualenv.pypa.io/en/latest/
pip3 install virtualenv # 使用自己对应安装的pip版本
1)创建虚拟环境目录
mkdir env-home
cd env-home
2)创建一个独立的Python运行环境: myenv
virtualenv --system-site-packages myenv
注: 1)参数:--system-site-packages (可省略)复制已经安装到系统Python环境中
的所有第三方包,也可以省略从而得到一个“纯净”的运行环境。
2) 在当前目录下会生成一个名为:“myenv” 的目录,该目录中存放刚生成的虚拟环境文件
3)激活虚拟运行环境
source myenv/bin/activate
命令执行完后,命令提示符变成有个(myenv)前缀,表示当前环境是一个名为“myenv”的Python环境,此时可以在该环境中安装库、运行程序等。
4)退出当前的myenv环境
deactivate
virtualenv 的一个最大的缺点就是,每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。
一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,比如放到 ~/virtualenvs/,并对不同的虚拟环境使用不同的目录来管理。virtualenvwrapper 正是这样做的。并且,它还省去了每次开启虚拟环境时候的 source 操作,使得虚拟环境更加好用。
pip3 install virtualenvwrapper
安装完成后,位于 ~/.local/bin
首先,需要对 virtualenvwrapper进行配置。它需要指定一个环境变量,叫做WORKON_HOME,并且运行初始化工具 virtualenvwrapper.sh,这个脚本在 ~/.local/bin目录下。WORKON_HOME 就是将要用来存放各种虚拟环境目录的目录,这里我们可以设置为 ~/virtualenvs。
export WORKON_HOME='~/virtualenvs'
source ~/.local/bin/virtualenvwrapper.sh
将此两条命令添加到 ~/.bashrc 中。这样每次启动终端的时候都会自动运行。
1) 创建虚拟环境
利用 virtualenvwrapper,我们可以轻松创建一个虚拟环境:
mkvirtualenv jetbot
之后我们就有了一个叫做 jetbot 的虚拟环境,存放在 $WORKON_HOME/jetbot 目录下。
新建虚拟环境之后会自动激活虚拟环境。
2)进入某个虚拟环境:
workon jetbot
3)离开虚拟环境:
deactivate
4)删除虚拟环境:
rmvirtualenv spider
Python 从3.3 版本开始,自带了一个虚拟环境 venv。它的很多操作都和 virtualenv 类似,但是两者运行机制不同。因为仅仅支持 python 3.3 和以后版本。所以,要在 python2 上使用虚拟环境,依然要利用 virtualenv 。官网:https://docs.python.org/zh-cn/3/tutorial/venv.html
# Windows 中venv已经以标准库的形式存在,不用再单独安装
# Linux
sudo apt-get install python3-venv # 如有不同版本的Python3,可指定具体版本venv:python3.5-venv
在当前目录创建一个独立的Python运行环境: myenv
# Windows py -3 -m venv myvenv # Linux python3 -m venv myvenv
3)激活虚拟运行环境
source myvenv/bin/activate
命令执行完后,命令提示符变成有个(myvenv)前缀
4)退出当前的myenv环境
deactivate
pipenv 是 Pipfile 主要倡导者、requests 作者 Kenneth Reitz 写的一个命令行工具,主要包含了Pipfile、pip、click、requests和virtualenv,能够有效管理Python多个环境,各种第三方包及模块。pipenv集成了pip,virtualenv两者的功能,且完善了两者的一些缺陷。主要完成两个功能:
1) 创建虚拟环境
2) 依赖管理
pipenv本人用的比较少,这里有一个入门教程:https://blog.csdn.net/weixin_40922744/article/details/103723069