1. 程式人生 > >python基礎——第10章 模組和標準庫

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

  1. 將模組放在正確的位置
    將模組放在正確的位置很容易,只需找出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條語句亦如此。