目錄 | 上一節 (9.1 包) | 下一節 (9.3 版本分發)
9.2 第三方模組
Python 擁有一個包含各種內建模組的大型庫(自帶電池(batteries included))(譯註:“自帶電池”來自於官方文件的翻譯,意為“功能齊全”)。
甚至還有很多第三方模組(可以使用)。請到 Python 包索引( PyPi ) 檢視,或者使用谷歌搜尋特定主題。
對於 Python 而言,如何處理第三方依賴關係是一個不斷演化的主題。本節僅僅涵蓋一些基礎知識,幫助你瞭解它們是如何工作的。
模組搜尋路徑
sys.path
是一個列表,包含所有 import
語句要檢查的目錄。檢視 sys.path
:
>>> import sys
>>> sys.path
... look at the result ...
>>>
如果匯入的內容不在目錄中。那麼將會觸發 ImportError
異常。
標準庫模組
Python 標準庫中的模組通常來自於 `/usr/local/lib/python3.6' 之類的位置。可以通過一個簡短的測試來確定模組來自於哪裡:
>>> import re
>>> re
<module 're' from '/usr/local/lib/python3.6/re.py'>
>>>
在互動式直譯器(REPL)中檢視模組的位置是一個很好的除錯技巧。互動式直譯器將會顯示模組所在的位置。
第三方模組
第三方模組通常位於專門的目錄 site-packages
中。如果執行與上述相同的步驟,可以看到第三方模組所在的位置:
>>> import numpy
>>> numpy
<module 'numpy' from '/usr/local/lib/python3.6/site-packages/numpy/__init__.py'>
>>>
同樣,如果要弄清楚匯入的第三方模組為什麼沒有像預期那樣工作,那麼檢視模組的位置是一個很好的除錯技巧。
安裝模組
安裝第三方模組最常用的技術是使用 pip
。示例:
bash % python3 -m pip install packagename
此命令會下載包並將包安裝到 site-packages
目錄中。
問題
- 你可能正在使用你不能直接控制的 Python。
- 企業認可的 Python
- 作業系統自帶的 Python
- 你可能沒有許可權在計算機中安裝全域性包
- 可能還有其它依賴
虛擬環境
對於包安裝問題,一個常見的解決方案是為自己建立所謂的“虛擬環境”。自然,建立虛擬環境的方式不止這一種——實際上,有好幾種相互競爭的工具和技術。如果你正在使用標準方式安裝的 Python,可以嘗試輸入以下程式碼建立虛擬環境:
bash % python -m venv mypython
bash %
稍等片刻後,你將擁有一個新目錄 mypython
,該目錄安裝了你自己的 Python。在 mypython
目錄中,可以找到 bin/
目錄(Unix 系統)或者 Scripts/
目錄(Windows 系統)。執行 bin/
目錄下的 activate
指令碼會“啟用“ 對應的 Python,使其成為 shell 的預設 python
命令。示例:
bash % source mypython/bin/activate
(mypython) bash %
現在,你可以從這裡開始安裝自己的 Python 包了。示例:
(mypython) bash % python -m pip install pandas
...
通常,為了試驗和試用不同的包,可以使用虛擬環境。另一方面,如果你正在建立一個應用並且它有特定的包依賴關係,那麼問題會稍有不同。
處理應用中的第三方依賴
如果你已經編寫了一個應用,並且該應用具有特定的第三方依賴,那麼建立並儲存一個包括你自己的程式碼及其依賴的環境將會是一個挑戰。可悲的是,這一直是一個非常混亂和頻繁變化的領域。即使到現在,它仍在繼續演變。
我不想向你提供必定會過時的資訊,建議查閱 Python 打包使用者指南 。
練習
練習 9.4:建立虛擬環境
看看你是否可以像上面一樣建立一個虛擬環境並在虛擬環境中安裝 pandas。