Python 模組尋找器介紹

閱讀 3:17·字數 988·發佈 
Youtube 頻道
訂閱 133

本節所講述的 Python 模組尋找器,同樣適用於套件,因為套件是特殊的模組。

Python 模組尋找器

模組尋找器作為 Python 匯入系統的一部份,其對應的英文為 Module Finders,他的作用是尋找定位需要載入的模組。這通常發生在import陳述式執行時,模組尋找器可能會被啟動並傳回相關模組的資訊,以便進行下一步的載入操作,如果模組尋找器未找到所需模組,那麽將導致例外狀況ModuleNotFoundError

Python 模組尋找器何時工作?

只有當模組快取中沒有需要載入的 Python 模組時,模組尋找器才會執行並定位模組,請留意這一點,他說明模組尋找器並不需要確定模組是否存在快取,這項工作在啟動尋找器之前已經完成。如果你希望編寫自己的 Python 模組尋找器,那麽不必在快取上浪費時間。

模組

想要了解模組快取,你可以檢視Python 模組快取一段。

Python 模組尋找器種類

Python 模組尋找器可以分為元路徑尋找器(Meta Path Finder)和路徑項目尋找器(Path Entry Finder),其中路徑項目尋找器具體實作了基於路徑定位 Python 腳本的功能,比如,定位模組Dog對應的腳本檔案。

事實上,元路徑尋找器和路徑項目尋找器均不止一個,他們被儲存在兩個不同的 Python 串列物件中。

Python 路徑項目尋找器隸屬於 Python 元路徑尋找器

需要指出,路徑項目尋找器只是服務於元路徑尋找器PathFinder,如果我們將該尋找器刪除,那麽路徑項目尋找器將不會發揮作用,對應的 Python 腳本也將無法載入。

在檔案finders.py中,我們使用import陳述式匯入了位於同一目錄的apple模組。由於在此之前PathFinder元路徑尋找器被刪除,因此匯入apple將導致例外狀況ModuleNotFoundError

finders.py
# 嘗試找到名稱包含 PathFinder 的尋找器
import sys
path_finder = None

for finder in sys.meta_path: if 'PathFinder' in str(finder): path_finder = finder break

# 將找到的 PathFinder 尋找器刪除 if path_finder: sys.meta_path.remove(path_finder)
# 匯入 apple 模組 import apple
apple.py
print('模組 apple 被尋找器發現了!')
ModuleNotFoundError: No module named 'apple'

Python 模組尋找勾點

Python 的模組尋找器具有可拓展性,你可以編寫自己的模組尋找器,來回報模組所在的位置,比如,存放在網際網路或區域網路的 Python 模組的網址。官方文件將其描述為勾點,你可以理解為新增尋找器實作自訂尋找方式的過程,或尋找器本身。

內容分類

程式碼

finders.py·codebeatme/python-reference·GitHub
apple.py·codebeatme/python-reference·GitHub