创建和使用虚拟环境
virtualenv
是一个构建孤立的 Python 环境的工具。该程序创建一个文件夹,其中包含使用 Python 项目所需的软件包所需的所有可执行文件。
安装 virtualenv 工具
这只需要一次。virtualenv
计划可通过你的发行版获得。在类似 Debian 的发行版中,该包被称为 python-virtualenv
或 python3-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
激活虚拟环境后,python
和 pip
二进制文件以及第三方模块安装的所有脚本都是 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.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