12. 虛擬環(huán)境和包?
12.1. 概述?
Python應(yīng)用程序通常會使用不在標(biāo)準(zhǔn)庫內(nèi)的軟件包和模塊。應(yīng)用程序有時需要特定版本的庫,因為應(yīng)用程序可能需要修復(fù)特定的錯誤,或者可以使用庫的過時版本的接口編寫應(yīng)用程序。
這意味著一個Python安裝可能無法滿足每個應(yīng)用程序的要求。如果應(yīng)用程序A需要特定模塊的1.0版本但應(yīng)用程序B需要2.0版本,則需求存在沖突,安裝版本1.0或2.0將導(dǎo)致某一個應(yīng)用程序無法運行。
這個問題的解決方案是創(chuàng)建一個 virtual environment,一個目錄樹,其中安裝有特定Python版本,以及許多其他包。
然后,不同的應(yīng)用將可以使用不同的虛擬環(huán)境。 要解決先前需求相沖突的例子,應(yīng)用程序 A 可以擁有自己的 安裝了 1.0 版本的虛擬環(huán)境,而應(yīng)用程序 B 則擁有安裝了 2.0 版本的另一個虛擬環(huán)境。 如果應(yīng)用程序 B 要求將某個庫升級到 3.0 版本,也不會影響應(yīng)用程序 A 的環(huán)境。
12.2. 創(chuàng)建虛擬環(huán)境?
用于創(chuàng)建和管理虛擬環(huán)境的模塊稱為 venv
。venv
通常會安裝你可用的最新版本的 Python。如果您的系統(tǒng)上有多個版本的 Python,您可以通過運行 python3
或您想要的任何版本來選擇特定的Python版本。
要創(chuàng)建虛擬環(huán)境,請確定要放置它的目錄,并將 venv
模塊作為腳本運行目錄路徑:
python3 -m venv tutorial-env
這將創(chuàng)建 tutorial-env
目錄,如果它不存在的話,并在其中創(chuàng)建包含 Python 解釋器副本和各種支持文件的目錄。
虛擬環(huán)境的常用目錄位置是 .venv
。 這個名稱通常會令該目錄在你的終端中保持隱藏,從而避免需要對所在目錄進(jìn)行額外解釋的一般名稱。 它還能防止與某些工具所支持的 .env
環(huán)境變量定義文件發(fā)生沖突。
創(chuàng)建虛擬環(huán)境后,您可以激活它。
在Windows上,運行:
tutorial-env\Scripts\activate
在Unix或MacOS上,運行:
source tutorial-env/bin/activate
(這個腳本是為bash shell編寫的。如果你使用 csh 或 fish shell,你應(yīng)該改用 activate.csh
或 activate.fish
腳本。)
激活虛擬環(huán)境將改變你所用終端的提示符,以顯示你正在使用的虛擬環(huán)境,并修改環(huán)境以使 python
命令所運行的將是已安裝的特定 Python 版本。 例如:
$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May 6 2016, 10:59:36)
...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>
To deactivate a virtual environment, type:
deactivate
into the terminal.
12.3. 使用pip管理包?
你可以使用一個名為 pip 的程序來安裝、升級和移除軟件包。 默認(rèn)情況下 pip
將從 Python Package Index <https://pypi.org> 安裝軟件包。 你可以在你的 web 瀏覽器中查看 Python Package Index。
pip
有許多子命令: "install", "uninstall", "freeze" 等等。 (請在 安裝 Python 模塊 指南頁查看完整的 pip
文檔。)
您可以通過指定包的名稱來安裝最新版本的包:
(tutorial-env) $ python -m pip install novas
Collecting novas
Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
Running setup.py install for novas
Successfully installed novas-3.1.1.3
您還可以通過提供包名稱后跟 ==
和版本號來安裝特定版本的包:
(tutorial-env) $ python -m pip install requests==2.6.0
Collecting requests==2.6.0
Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0
If you re-run this command, pip
will notice that the requested
version is already installed and do nothing. You can supply a
different version number to get that version, or you can run python
-m pip install --upgrade
to upgrade the package to the latest version:
(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0
python -m pip uninstall
followed by one or more package names will
remove the packages from the virtual environment.
python -m pip show
will display information about a particular package:
(tutorial-env) $ python -m pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:
python -m pip list
will display all of the packages installed in
the virtual environment:
(tutorial-env) $ python -m pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)
python -m pip freeze
will produce a similar list of the installed packages,
but the output uses the format that python -m pip install
expects.
A common convention is to put this list in a requirements.txt
file:
(tutorial-env) $ python -m pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0
然后可以將 requirements.txt
提交給版本控制并作為應(yīng)用程序的一部分提供。然后用戶可以使用 install -r
安裝所有必需的包:
(tutorial-env) $ python -m pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
...
Installing collected packages: novas, numpy, requests
Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip
有更多選擇。有關(guān) pip
的完整文檔,請參閱 安裝 Python 模塊 指南。當(dāng)您編寫一個包并希望在 Python 包索引中使它可用時,請參考 分發(fā) Python 模塊 指南。