解決模組匯入ModuleNotFoundError: No module named 'XXX'的問題
阿新 • • 發佈:2021-06-10
想要解決上面的問題,我們需要明確import匯入本質,才好從根上去解決問題。
import匯入本質
通常情況下,當使用 import 語句匯入模組後,Python 會按照以下順序查詢指定的模組檔案:- 在當前目錄,即當前執行的程式檔案所在目錄下查詢;
- 到 PYTHONPATH(環境變數)下的每個目錄中查詢;
- 到 Python 預設的安裝目錄下查詢。
解決方式
針對於上述三種查詢模組的方式,對應的給出三種解決方案:
- 向 sys.path 中臨時新增模組檔案儲存位置的完整路徑;
- 將模組放在 sys.path 變數中已包含的模組載入路徑中;
- 設定 path 系統環境變數。
1.臨時新增模組完整路徑
模組檔案的儲存位置,可以臨時新增到 sys.path 變數中。例如想要在D:\XXX\autoCMS_Interface\test_moudle\module2.py模組下匯入D:\XXX\PyCMSDY\test_config的module3.py檔案,注意module2.py和module3.py分別處於另個不同專案中。sys.path.append(r"D:\XXX\PyCMSDY \test_config")
import module3
print(module3.name)
執行sys.path可以看出"D:\XXX\PyCMSDY\test_config"已經新增到path路徑下。
需要注意的是,通過該方法新增的目錄,只能在執行當前檔案的視窗中有效,視窗關閉後即失效。2.將模組儲存到指定位置
Python 程式預設的模組載入路徑儲存在 sys.path 變數中,因此,我們可以在module2 .py 程式檔案中先看看 sys.path 中儲存的預設載入路徑,向 say.py 檔案中輸出 sys.path 的值,如下所示:['D:\\autoCMS_Interface\\test_moudle ',
'D:\\autoCMS_Interface',
'C:\\Program Files\\JetBrains\\PyCharm 2020.2.3\\plugins\\python\\helpers\\pycharm_display',
'C:\\Program Files\\Python37\\python37.zip', 'C:\\Program Files\\Python37\\DLLs',
'C:\\Program Files\\Python37\\lib', 'C:\\Program Files\\Python37',
'C:\\Users\\AppData\\Roaming\\Python\\Python37\\site-packages',
'C:\\Program Files\\Python37\\lib\\site-packages',
'C:\\Program Files\\JetBrains\\PyCharm 2020.2.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
上面的執行結果中,列出的所有路徑都是 Python 預設的模組載入路徑,但通常來說,我們預設將 Python 的擴充套件模組新增在 lib\site-packages
路徑下,它專門用於存放 Python 的擴充套件模組和包。
所以,我們可以直接將我們已編寫好的 module3.py 檔案新增到 lib\site-packages
路徑下,就相當於為 Python 擴充套件了一個 module3模組,這樣任何 Python 程式都可使用該模組。