建立和使用虛擬環境

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