[譯]The Python Tutorial#Virtual Environments and Packages

[譯]The Python Tutorial#Virtual Environments and Packages

12.1 Introduction

Python應用經常使用不屬于標準庫的包和模塊。應用有時會需要一個特定版本的庫,因為應用可能會需要一個特定bug得到修復的庫,或者應用依賴庫中一個廢棄版本的接口。

這意味著一個Python安裝可能無法滿足每個應用的需求。如果應用A依賴特定模塊的1.0版本,而應用B依賴其2.0版本,那么需求就沖突了,并且安裝1.0和2.0的任意一個版本都會導致其中一個應用無法運行。

以上問題的解決方案是創建虛擬環境,虛擬環境是包含一個特定Python版本的Python安裝以及一些附加包的獨立目錄樹。

不同的應用可以使用不同的虛擬環境。為解決先前需求沖突的例子,應用A可以擁有安裝了版本1.0的虛擬環境,而應用B可以擁有安裝了版本2.0的另一個虛擬環境。如果應用B需要升級到版本3.0的庫,這不會影響A的虛擬環境。

12.2 Creating Virtual Environments

用來創建和管理虛擬換環境模塊叫做venvvenv通常會安裝最近版本的Python。如果系統中有多個版本的Python,可以運行python3或者其他任何版本來選擇一個指定的Python版本。

要創建一個虛擬環境,首先需要決定放置虛擬環境的目錄,然后以腳本方式運行帶有目錄路徑的venv模塊:

python3 -m venv tutorial-env

如果tutorial-env目錄不存在,會創建一個tutorial-env目錄,同時在目錄中創建子目錄,包含Python解釋器,標準庫以及各種各樣支持文件的副本。

一旦創建了一個虛擬環境,就可以激活它了。

在Windows中,運行:

tutorial-env\Scripts\activate.bat

在Unix或者MacOS中,運行:

source tutorial-env/bin/activate

(這個腳本使用bash shell編寫。如果你使用csh或者fish shell,有activae.csh以及activate.fish腳本可供選擇)

激活虛擬環境會改變shell的提示,以顯示正在使用的虛擬環境,并且改變環境,以便運行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 Managing Packages with pip

使用一個叫做pip的程序,可以安裝,更新和移除包。默認情況下pip會從Python Package Index https://pypi.python.org/pypi 安裝包。可以使用瀏覽器瀏覽Python Package Index,或者使用pip有限的搜索特性:

(tutorial-env) $ pip search astronomy
skyfield               - Elegant astronomy for Python
gary                   - Galactic astronomy and gravitational dynamics.
novas                  - The United States Naval Observatory NOVAS astronomy library
astroobs               - Provides astronomy ephemeris to plan telescope observations
PyAstronomy            - A collection of astronomy related tools for Python.
...

pip有一系列子命令:"search", "install", "uninstall", "freeze"等等(參考 Installing Python Modules獲取pip的完整文檔)

指定包的名字,可以安裝最新版本的包:

(tutorial-env) $ 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) $ 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) $ 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: me@kennethreitz.com
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) $ 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還有其他許多選項。查閱 Installing Python Modules 獲取完整的pip文檔。如果開發了一個包,并且希望在 Python Package Index上可用,查閱 Distributing Python Modules

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容