Python创建和使用虚拟环境

示例

virtualenv是构建隔离的Python环境的工具。该程序创建一个文件夹,其中包含使用Python项目所需的所有必需可执行文件。

安装virtualenv工具

只需要一次。该virtualenv程序可能会通过您的发行版提供。在类似Debian的发行版中,该软件包称为python-virtualenv或python3-virtualenv。

您也可以virtualenv使用pip安装:

$ pip install virtualenv

创建一个新的虚拟环境

每个项目只需要一次。启动要隔离依赖项的项目时,可以为此项目设置新的虚拟环境:

$ virtualenv foo

这将创建一个foo包含工具脚本和python二进制文件本身副本的文件夹。文件夹的名称无关。创建虚拟环境后,它便是自包含的,不需要使用该virtualenv工具进行进一步操作。您现在可以开始使用虚拟环境。

激活现有的虚拟环境

激活虚拟环境,需要一些外壳魔术,因此您的Python是内部的,foo而不是系统的。这是activate文件的目的,必须将其来源到当前的shell中:

$ source foo/bin/activate

Windows用户应输入:

$ foo\Scripts\activate.bat

激活虚拟环境后,python和pip二进制文件以及由第三方模块安装的所有脚本就是其中的脚本foo。特别是,与之一起安装的所有模块pip都将部署到虚拟环境中,从而允许一个封闭的开发环境。激活虚拟环境还应在提示符后添加前缀,如以下命令所示。

# 仅将“请求”安装到foo,而不是全局
(foo)$ pip install requests

保存和还原依赖关系

要保存通过安装的模块,pip可以使用以下freeze命令将所有这些模块(以及相应的版本)列出到文本文件中。这使其他人可以使用install命令快速安装应用程序所需的Python模块。该文件的常规名称是requirements.txt:

(foo)$ pip freeze > requirements.txt
(foo)$ pip install -r requirements.txt

请注意,freeze列出了所有模块,包括手动安装的顶级模块所需的传递依赖项。因此,您可能更喜欢requirements.txt通过仅放置所需的顶级模块来手工制作文件。

退出虚拟环境

如果您已在虚拟环境中完成工作,则可以将其停用以返回到常规外壳程序:

(foo)$ deactivate

在共享主机中使用虚拟环境

有时无法$source bin/activate使用virtualenv,例如,如果您在共享主机中使用mod_wsgi,或者您无权访问文件系统(例如在Amazon API Gateway或Google AppEngine中)。在这种情况下,您可以部署在本地virtualenv中安装的库并修补您的sys.path。

幸运的virtualenv附带了一个脚本,可以同时更新您sys.path和您的sys.prefix

import os

mydir = os.path.dirname(os.path.realpath(__file__))
activate_this = mydir + '/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

您应该在服务器将要执行的文件的开头添加这些行。

这将找到bin/activate_this.py的是virtualenv在同一目录正在执行创建的文件并添加lib/python2.7/site-packages到sys.path

如果要使用该activate_this.py脚本,请记住至少使用bin和lib/python2.7/site-packages目录及其内容进行部署。

Python 3.x 3.3

内置虚拟环境

从Python 3.3开始,venv模块将创建虚拟环境。该pyvenv命令不需要单独安装:

$ pyvenv foo
$ source foo/bin/activate

要么

$ python3 -m venv foo
$ source foo/bin/activate