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

    Python 模組搜尋路徑介紹,模組搜尋路徑中的目錄有哪些

    閱讀 8:27·字數 2539·更新 
    Youtube 頻道
    訂閱 375

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

    Python 模組搜尋路徑

    Python 模組搜尋路徑(Module Search Path)用於搜尋需要載入的模組,在 Python 啟動後,他與sys模組的path變數是等同的。

    模組搜尋路徑並非單一的路徑,這一點和環境變數PATH類似,他可以指向多個包含模組的資料夾,或zip壓縮檔案。此外,搜尋路徑可以包含絕對路徑或相對路徑,比如,''是一個表示目前目錄的相對路徑。

    如何檢視模組搜尋路徑?

    在互動模式中,輸入並執行import syssys.path兩行程式碼,即可檢視sys.path表示的模組搜尋路徑。如果是py檔案,則可將sys.path取代為print(sys.path)

    Windows
    import sys
    sys.path
    ['', '\\python312.zip', '', '\\Lib', '\\Lib\\site-packages']
    UNIX/Linux/macOS
    import sys
    sys.path
    ['', '/usr/lib64/python312.zip', '/usr/lib64/python3.12', '/usr/lib64/python3.12/lib-dynload', '/usr/lib64/python3.12/site-packages', '/usr/lib/python3.12/site-packages']
    print_path.py
    # 顯示 sys.path 表示的 Python 搜尋路徑
    import sys
    print(sys.path)

    模組搜尋路徑的優先順序

    sys模組中,儲存模組搜尋路徑的變數path是一個串列物件,其第一個元素表示的路徑,首先被用於模組的搜尋,如果模組不存在則使用下一個元素,直至模組被找到或抵達串列末尾。

    Python 模組搜尋路徑中的目錄

    模組搜尋路徑一般包含以下幾種類別的目錄,被執行目標所在的目錄或目前工作目錄,環境變數包含的目錄,標準/擴充程式庫目錄,第三方套件目錄,pth檔案中的目錄,以及 Windows 登錄檔中的目錄。

    Python 腳本目錄或目前目錄

    當你使用 Python 執行腳本檔案時,模組搜尋路徑的第一項是腳本檔案所在的目錄。當執行包含__main__.py的資料夾或zip檔案時,模組搜尋路徑的第一項為資料夾或zip檔案所在的目錄。

    如果未指定執行目標,那麽模組搜尋路徑的第一項為目前工作目錄,該目錄可能表述為相對路徑''。當你在命令列輸入pythonpython3進入 Python 互動模式,或使用-c選項執行程式碼,-m選項執行模組時,搜尋路徑的第一項等價於命令列的目前目錄。

    腳本檔案run.py顯示了搜尋路徑的第一個元素,在使用命令列執行該檔案後,我們將看到run.py所在的目錄。

    run.py
    # 顯示 sys.path 的第一個元素,他是該腳本檔案所在的目錄
    import sys
    print(f'腳本位於:{sys.path[0]}')
    Windows
    腳本位於:\import_system
    UNIX/Linux/macOS
    腳本位於:/import_system

    壓縮檔案run.zip包含腳本檔案__main__.py,將run.zip作為執行目標,結果顯示腳本檔案位於zip檔案中。

    zip/__main__.py
    # 顯示 sys.path 的第一個元素,他是 __main__.py 所在 zip 檔案的路徑
    import sys
    print(f'__main__.py 位於:{sys.path[0]}')
    Windows
    __main__.py 位於:\import_system\zip\run.zip
    UNIX/Linux/macOS
    __main__.py 位於:/import_system/zip/run.zip

    在命令列中使用-c選項執行 Python 程式碼,顯示模組搜尋路徑的第一項。

    Windows
    python -c "import sys;print(f'path[0] = [{sys.path[0]}]')"
    path[0] = []
    UNIX/Linux/macOS
    python3 -c "import sys;print(f'path[0] = [{sys.path[0]}]')"
    path[0] = []

    環境變數 PYTHONPATH 中的目錄

    當你在作業系統中設定了環境變數PYTHONPATH後,該變數所包含的一系列目錄或zip檔案路徑,將被新增至模組搜尋路徑。

    Python 標準/擴充程式庫目錄

    Python 自身擁有一個標準程式庫,其中含有大量功能各異的標準模組,模組搜尋路徑需要包含該標準程式庫的目錄,以及標準程式庫zip檔案的路徑。Python 擴充程式庫提供標準程式庫可能相依的 API 支援,如果需要,擴充程式庫的目錄也會包含在模組搜尋路徑中。

    標準/擴充程式庫在各作業系統中的位置

    在 Windows 中,Python 標準程式庫一般位於安裝目錄的Lib資料夾,標準程式庫zip檔案位於安裝目錄本身,擴充程式庫位於安裝目錄的DLLs資料夾。

    在 UNIX/Linux/macOS 中,標準程式庫可能位於lib/python<X>.<Y>,標準程式庫zip檔案位於lib,擴充程式庫位於lib/python<X>.<Y>/lib-dynload。這裏的lib一般是指/usr/lib,或同一位置的lib64X為 Python 主要版本號碼,Y為次要版本號碼。

    如何檢視標準/擴充程式庫的位置?

    當不能確定標準/擴充程式庫的位置時,可以在互動模式中輸入import syssys.prefixsys.exec_prefix幾行程式碼,來顯示其相關資訊。其中sys.prefix對應了標準程式庫目錄,sys.exec_prefix對應了擴充程式庫目錄。

    如果是py檔案,則可以使用print函式在終端機顯示他們。

    Windows
    import sys
    sys.prefix
    ''
    sys.exec_prefix
    ''
    UNIX/Linux/macOS
    import sys
    sys.prefix
    '/usr'
    sys.exec_prefix
    '/usr'
    print_prefix.py
    # 顯示標準/擴充程式庫目錄
    import sys
    print(sys.prefix)
    print(sys.exec_prefix)

    Python 第三方套件目錄

    模組搜尋路徑還將包括第三方套件的目錄,一般情況下,他指向一個名為site-packages的資料夾,其中包含自行組建或安裝的套件。

    第三方套件

    要了解第三方套件的具體位置,你可以檢視Python 第三方套件的位置一段。

    pth 檔案中的目錄

    如果第三方套件資料夾包含任何的pth檔案,則這些檔案中按行列出的目錄或zip檔案路徑,也將成為模組搜尋路徑的一部分。

    Windows 登錄檔中的目錄

    在 Windows 系統中,登錄檔機碼HKEY_CURRENT_USER\Software\Python\PythonCore\<X>.<Y>\PythonPathHKEY_LOCAL_MACHINE\Software\Python\PythonCore\<X>.<Y>\PythonPath的預設機碼值所包含的目錄或zip檔案路徑,將被新增至模組搜尋路徑。上述中的X為 Python 主要版本號碼,Y為次要版本號碼。

    內容分類

    原始碼

    print_path.py·codebeatme/python-reference·GitHub
    run.py·codebeatme/python-reference·GitHub
    zip/__main__.py·codebeatme/python-reference·GitHub
    print_prefix.py·codebeatme/python-reference·GitHub

    講解影片

    Python 找不到模組?分析解決模組匯入錯誤「ModuleNotFoundError No module named」·YouTube