URLhttps://learnscript.net/zh-hant/python-reference/import-system/module-finders/
    複製連結移至說明  範例

    Python 模組尋找器介紹

    閱讀 3:15·字數 980·發佈 
    Youtube 頻道
    訂閱 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

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

    內容分類

    原始碼

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