Python 模組尋找器介紹
訂閱 375
本節所講述的 Python 模組尋找器,同樣適用於套件,因為套件是特殊的模組。
Python 模組尋找器
模組尋找器作為 Python 匯入系統的一部份,其對應的英文為 Module Finders,他的作用是尋找定位需要載入的模組。這通常發生在import
陳述式執行時,模組尋找器可能會被啟動並傳回相關模組的資訊,以便進行下一步的載入操作,如果模組尋找器未找到所需模組,那麽將導致例外狀況ModuleNotFoundError
。
模組尋找器何時工作?
只有當模組快取中沒有需要載入的模組時,模組尋找器才會執行並定位模組,請留意這一點,他說明模組尋找器並不需要確定模組是否存在快取,這項工作在啟動尋找器之前已經完成。如果你希望編寫自己的模組尋找器,那麽不必在快取上浪費時間。
模組
想要了解模組快取,你可以檢視Python 模組快取一段。
Python 模組尋找器種類
模組尋找器可以分為元路徑尋找器(Meta Path Finder)和路徑項目尋找器(Path Entry Finder),其中路徑項目尋找器具體實作了基於路徑定位 Python 腳本的功能,比如,定位模組Dog
對應的腳本檔案。
事實上,元路徑尋找器和路徑項目尋找器均不止一個,他們被儲存在兩個不同的串列物件中。
路徑項目尋找器隸屬於元路徑尋找器
需要指出,路徑項目尋找器只是服務於元路徑尋找器PathFinder
,如果我們將該尋找器刪除,那麽路徑項目尋找器將不會發揮作用,對應的 Python 腳本也將無法載入。
在檔案finders.py
中,我們使用import
陳述式匯入了位於同一目錄的apple
模組。由於在此之前PathFinder
元路徑尋找器被刪除,因此匯入apple
將導致例外狀況ModuleNotFoundError
。
# 嘗試找到名稱包含 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
print('模組 apple 被尋找器發現了!')
ModuleNotFoundError: No module named 'apple'
Python 模組尋找勾點
Python 的模組尋找器具有可拓展性,你可以編寫自己的模組尋找器,來回報模組所在的位置,比如,存放在網際網路或區域網路的模組的網址。官方文件將其描述為勾點,你可以理解為新增尋找器實作自訂尋找方式的過程,或尋找器本身。
內容分類
原始碼
finders.py·codebeatme/python-reference·GitHub
apple.py·codebeatme/python-reference·GitHub