Python 模組尋找器介紹
本節所講述的 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
。
# 嘗試找到名稱包含 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 的模組尋找器具有可拓展性,你可以編寫自己的模組尋找器,來回報模組所在的位置,比如,存放在網際網路或區域網路的 Python 模組的網址。官方文件將其描述為勾點,你可以理解為新增尋找器實作自訂尋找方式的過程,或尋找器本身。
內容分類
程式碼
finders.py·codebeatme/python-reference·GitHub
apple.py·codebeatme/python-reference·GitHub