1. 程式人生 > 其它 >虛擬環境和包

虛擬環境和包

12. 虛擬環境和包

12.1. 概述

Python應用程式通常會使用不在標準庫內的軟體包和模組。應用程式有時需要特定版本的庫,因為應用程式可能需要修復特定的錯誤,或者可以使用庫的過時版本的介面編寫應用程式。

這意味著一個Python安裝可能無法滿足每個應用程式的要求。如果應用程式A需要特定模組的1.0版本但應用程式B需要2.0版本,則需求存在衝突,安裝版本1.0或2.0將導致某一個應用程式無法執行。

這個問題的解決方案是建立一個 virtual environment,一個目錄樹,其中安裝有特定Python版本,以及許多其他包。

然後,不同的應用將可以使用不同的虛擬環境。 要解決先前需求相沖突的例子,應用程式 A 可以擁有自己的 安裝了 1.0 版本的虛擬環境,而應用程式 B 則擁有安裝了 2.0 版本的另一個虛擬環境。 如果應用程式 B 要求將某個庫升級到 3.0 版本,也不會影響應用程式 A 的環境。

12.2. 建立虛擬環境

用於建立和管理虛擬環境的模組稱為 venvvenv 通常會安裝你可用的最新版本的 Python。如果您的系統上有多個版本的 Python,您可以通過執行 python3 或您想要的任何版本來選擇特定的Python版本。

要建立虛擬環境,請確定要放置它的目錄,並將 venv 模組作為指令碼執行目錄路徑:

python3 -m venv tutorial-env

這將建立 tutorial-env 目錄,如果它不存在的話,並在其中建立包含 Python 直譯器副本和各種支援檔案的目錄。

虛擬環境的常用目錄位置是 .venv。 這個名稱通常會令該目錄在你的終端中保持隱藏,從而避免需要對所在目錄進行額外解釋的一般名稱。 它還能防止與某些工具所支援的 .env

 環境變數定義檔案發生衝突。

建立虛擬環境後,您可以啟用它。

在Windows上,執行:

tutorial-env\Scripts\activate.bat

在Unix或MacOS上,執行:

source tutorial-env/bin/activate

(這個指令碼是為bash shell編寫的。如果你使用 csh 或 fish shell,你應該改用 activate.csh 或 activate.fish 指令碼。)

啟用虛擬環境將改變你所用終端的提示符,以顯示你正在使用的虛擬環境,並修改環境以使 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']
>>>

12.3. 使用pip管理包

你可以使用一個名為 pip 的程式來安裝、升級和移除軟體包。 預設情況下 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

如果你重新執行這個命令,pip 會注意到已經安裝了所請求的版本並且什麼都不做。您可以提供不同的版本號來獲取該版本,或者您可以執行 pip install --upgrade 將軟體包升級到最新版本:

(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

pip uninstall 後跟一個或多個包名稱將從虛擬環境中刪除包。

pip show 將顯示有關特定包的資訊:

(tutorial-env) $ 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: [email protected]
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:

pip list 將顯示虛擬環境中安裝的所有軟體包:

(tutorial-env) $ pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)

pip freeze` 將生成一個類似的已安裝包列表,但輸出使用 pip install 期望的格式。一個常見的約定是將此列表放在 requirements.txt 檔案中:

(tutorial-env) $ pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0

然後可以將 requirements.txt 提交給版本控制並作為應用程式的一部分提供。然後使用者可以使用 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 有更多選擇。有關 pip 的完整文件,請參閱 安裝 Python 模組 指南。當您編寫一個包並希望在 Python 包索引中使它可用時,請參考 分發 Python 模組 指南。

 

目錄

上一個主題

11. 標準庫簡介 —— 第二部分

下一個主題

13. 接下來?

本頁

«   © 版權所有 2001-2022, Python Software Foundation.
This page is licensed under the Python Software Foundation License Version 2.
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
See History and License for more information.

The Python Software Foundation is a non-profit corporation. Please donate.

最後更新於 5月 10, 2022. Found a bug?
Created using Sphinx 3.2.1. "