python基礎——第10章 模組和標準庫
目錄
10.1.1
要告訴直譯器去哪裡查詢這個模組,可執行如下命令(以Windows目錄為例):
>>> import sys
>>> sys.path.append('C:/python')
如果一定要重新載入模組,可使用模組importlib中的函式reload,它接受一個引數(要重新載入的模組),並返回重新載入的模組。如果在程式執行時修改了模組,並希望這種修改反映到程式中,這將很有用。
10.1.3 讓模組可用
Python打包技術一度日益複雜、各自為政,儘管現已被Python Packaging Authority控制並簡化,但需要學習的還是有很多。這裡不深入介紹這個棘手的主題,建議參閱“Python打包使用者指南”:packaging.python.org。
- 將模組放在正確的位置
將模組放在正確的位置很容易,只需找出Python直譯器到哪裡去查詢模組,再將檔案放在這個地方即可。
# 你可能還記得,可在模組sys的變數path中找到目錄列表(即搜尋路徑)。
>>> import sys, pprint
>>> pprint.pprint(sys.path)
['C:\\Python35\\Lib\\idlelib',
'C:\\Python35',
'C:\\Python35\\DLLs',
'C:\\Python35\\lib',
'C:\\Python35\\lib\\plat-win',
'C:\\Python35\\lib\\lib-tk',
'C:\\Python35\\lib\\site-packages']
提示 如果要列印的資料結構太大,一行容納不下,可使用模組pprint中的函式pprint(而不是普通print語句)。pprint是個卓越的列印函式,能夠更妥善地列印輸出。
雖然放在這裡顯示的任何一個位置中都可行,但目錄site-packages是最佳的選擇,因為它就是用來放置模組的。
2. 告訴直譯器到哪裡去查詢
如果將模組放在其他地方,就必須告訴直譯器到哪裡去查詢。前面說過,要告訴直譯器到哪裡去查詢模組,辦法之一是直接修改sys.path,但這種做法不常見。標準做法是將模組所在的目錄包含在環境變數PYTHONPATH中。
環境變數PYTHONPATH的內容隨作業系統而異(參見旁註“環境變數”),但它基本上類似於sys.path,也是一個目錄列表。
10.1.4 包
為組織模組,可將其編組為包(package)。包其實就是另一種模組,但有趣的是它們可包含其他模組。模組儲存在副檔名為.py的檔案中,而包則是一個目錄。要被Python視為包,目錄必須包含檔案__init__.py。如果像普通模組一樣匯入包,檔案__init__.py的內容就將是包的內容。
表10-1 一種簡單的包佈局
檔案/目錄 | 描 述 |
---|---|
~/python/ | PYTHONPATH中的目錄 |
~/python/drawing/ | 包目錄(包drawing) |
~/python/drawing/init.py | 包程式碼(模組drawing) |
~/python/drawing/colors.py | 模組colors |
~/python/drawing/shapes.py | 模組shapes |
完成這些準備工作後,下面的語句都是合法的:
import drawing # (1) 匯入drawing包
import drawing.colors # (2) 匯入drawing包中的模組colors
from drawing import shapes # (3) 匯入模組shapes
執行第1條語句後,便可使用目錄drawing中檔案__init__.py的內容,但不能使用模組shapes和colors的內容。執行第2條語句後,便可使用模組colors,但只能通過全限定名drawing.colors來使用。執行第3條語句後,便可使用簡化名(即shapes)來使用模組shapes。請注意,這些語句只是示例,並不用像這裡做的那樣,先匯入包再匯入其中的模組。換而言之,完全可以只使用第2條語句,第3條語句亦如此。