创建和使用虚拟环境

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

安装 virtualenv 工具

这只需要一次。virtualenv 计划可通过你的发行版获得。在类似 Debian 的发行版中,该包被称为 python-virtualenvpython3-virtualenv

你也可以使用 pip 安装 virtualenv

$ pip install virtualenv

创建新的虚拟环境

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

$ virtualenv foo

这将创建一个 foo 文件夹,其中包含工具脚本和 python 二进制文件本身的副本。文件夹的名称不相关。一旦创建了虚拟环境,它就是自包含的,不需要使用 virtualenv 工具进一步操作。你现在可以开始使用虚拟环境了。

激活现有虚拟环境

激活虚拟环境,需要一些 shell 魔术,因此你的 Python 是 foo 而不是系统的。这是 activate 文件的目的,你必须将其导入当前 shell:

$ source foo/bin/activate

Windows 用户应键入:

$ foo\Scripts\activate.bat

激活虚拟环境后,pythonpip 二进制文件以及第三方模块安装的所有脚本都是 foo 内的。特别是,所有安装了 pip 的模块都将部署到虚拟环境中,从而实现了一个包含的开发环境。激活虚拟环境还应该为你的提示添加前缀,如以下命令所示。

# Installs 'requests' to foo only, not globally
(foo)$ pip install requests

保存和恢复依赖项

要通过 pip 保存已安装的模块,可以使用 freeze 命令将所有这些模块(以及相应的版本)列入文本文件。这允许其他人使用 install 命令快速安装应用程序所需的 Python 模块。这样一个文件的传统名称是 requirements.txt

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

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

退出虚拟环境

如果你已在虚拟环境中工作,则可以将其停用以返回到正常的 shell:

(foo)$ deactivate

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

有时,如果你在共享主机中使用 mod_wsgi,或者如果你无法访问文件系统(例如 Amazon API Gateway 或 Google AppEngine),则无法使用 virtualenv。对于这些情况,你可以部署在本地 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.pyvirtualenv 在你正在执行的同一目录中创建文件并将你的 lib/python2.7/site-packages 添加到 sys.path

如果你希望使用 activate_this.py 脚本,请记住至少部署 binlib/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