虚拟环境及venv和virtualenv的区别说明
一、虚拟环境概述
Python应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库,修复特定的错误,或者可以使用库的过时版本的接口编写应用程序。
这说明一个Python安装可能无法满足每个应用程序的要求。例如:应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本,则需求存在冲突,安装版本1.0或2.0将导致某一个应用程序无法运行。
这个问题的解决方案是创建一个虚拟环境,一个目录树,其中安装有特定Python版本,以及其他包。
不同的应用将可以使用不同的虚拟环境。就可以解决需求相冲突的例子。
二、创建激活虚拟环境
用于创建和管理虚拟环境的模块称为venv。venv通常会安装你可用的最新版本的Python。若系统上有多个版本的Python,可以通过运行python3或您想要的任何版本来指定Python版本。
1、创建虚拟环境
如项目名叫tutorial,创建对应的文件夹然后切换到根目录:cdtutorial。
如果使用venv,使用命令:$python-mvenvtutorial-env
其中tutorial-env是虚拟环境的名字,也作为创建的虚拟环境文件夹名称,可以自由修改。如果tutorial-env目录不存在,它将为你创建一个,并在其中创建包含Python解释器,标准库和各种支持文件的副本的目录。
注意:需要tutorial-env的虚拟环境文件夹名称加入.gitignore文件以便让Git忽略。
虚拟环境的常用目录位置是.venv。这个名称通常会令该目录在你的终端中保持隐藏,从而避免需要对所在目录进行额外解释的一般名称。它还能防止与某些工具所支持的.env环境变量定义文件发生冲突。
如果使用virtualenv,则使用下面的命令:$virtualenvsnow-venv
2、激活虚拟环境
通过执行对应的激活脚本来激活虚拟环境,不同操作系统的激活命令(激活脚本及路径)有一点不同。
Windows(CMD.exe):$tutorial-env\Scripts\activate.bat
Linux和macOS(bash/zsh):$sourcetutorial-env/bin/activate
activate.bat这个脚本是为bashshell编写的。如果你使用csh或fishshell,你应该改用activate.csh或activate.fish脚本。
激活虚拟环境以后,命令行提示符前会显示当前虚拟环境的名字,并修改环境以使python命令所运行的将是已安装的特定Python版本。
退出虚拟环境:deactivate
三、venv模块和virtualenv工具
virtualenv:Python虚拟环境管理工具。
venv:Python标准库内置的虚拟环境管理工具,Python3.3加入,Python3.5开始作为管理虚拟环境的推荐工具,用法类似virtualenv,唯一不同的是创建虚拟环境的方式。
Python2.x时,创建虚拟环境需要安装第三方的virtualenv,但Python3.3之后,标准库里内置了venv模块,可以用来创建虚拟环境。
如果你使用Python3.3及以上版本,推荐使用标准库内置的venv模块替代virtualenv。
如果你使用Python2,就只能选择virtualenv,你需要额外安装它。pipinstallvirtualenv
补充:【python虚拟环境】virtualenv和venv不一样吗
在开发python应用程序的时候,系统安装的python3只有一个版本:3.4。所有的第三方的包都回被pip安装到python3的site-packages目录下。
如果我们要要同时开发多个应用程序,那这些应用都共用一个python,就是安装在系统的python3。如果应用A需要jinja2.7,而应用B需要jinja2.6怎么办?
这种情况下,每个应用需要各自拥有一套“独立”的python运行环境。有两个常用工具用于创建python“独立”环境:
venvisavailablebydefaultinPython3.3andlater,andinstallspipandsetuptoolsintocreatedvirtualenvironmentsinPython3.4andlater.
virtualenvneedstobeinstalledseparately,butsupportsPython2.7+andPython3.3+,andpip,setuptoolsandwheelarealwaysinstalledintocreatedvirtualenvironmentsbydefault(regardlessofPythonversion).
virtualenv
virtualenv就是用来为一个应用创建一套“隔离”的python运行环境。
首先,我们用pip安装virtualenv
pip3installvirtualenv
然后,假定我们要开发一个新的项目,需要一套独立的python运行环境,可以这么做:
在项目目录下,创建一个独立的python运行环境,命名为venv
virtualenv--no-site-packagesvenv
命令virtualenv就可以创建一个独立的python运行环境,我们还加上了参数--no-site-packages,这样,已经安装到系统python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的pyhton运行环境。
新建的python环境被放到项目录下的venv目录,有了venv这个python环境,就可以用source进入该环境:
source./venv/bin/activate
或者是
source./venv/Scripts/activate
注意查看activate命令被放在了哪个目录下。
执行上面的命令后,可以看懂命令指示符变了,有个(venv)前缀,表示当前环境是一个名为venv的python环境,下面可以正常安装各种第三方包,并运行python命令。
在venv环境下,用pip安装的包都在安装到了venv这个环境下,系统python环境不受任何影响,也就是说,venv环境是专门针对当前项目创建的。
退出venv环境,使用deactivate命令:
deactivate
这样就回到了正常的环境。
viratualenv是如何创建“独立”的python运行环境呢?其实就是把系统python复制一份到virtualenv的环境,用命令source进入一个virutalenv环境时,virtualenv会修改相关环节变量,让命令python和pip均指向当前的virtualenv环境。
venv
venv不用安装,不过需要python3.3以上。创建一个独立的python运行环境,命名为venv
python3-mvenv./venv
上面的命令会在当前目录下创建一个名为venv的python环境中。进入和退出该环境的方式和virtualenv一致。
参考文档:官方文档
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。