1. 程式人生 > >Windows下執行python指令碼報錯“ImportError: No Module named ...”的解決方法

Windows下執行python指令碼報錯“ImportError: No Module named ...”的解決方法

之前遇到一個問題,在Pycharm或IPython之類的IDE上執行指令碼正常,但是直接執行或cmd命令列執行的時候報了模組未能找到的

誤——ImportError: No Module named ...。 這是啥情況?

Python在啟動直譯器(Interpreter)的時候不光會匯入環境變數中sys.path發現的模組,還會匯入當前工作目錄下的模組。當你在IDE中啟動直譯器時,當前的工作目錄就是專案目錄,能順利呼叫同項目中的模組;但是當你通過命令列啟動時,當前工作目錄為你啟動直譯器時所在的目錄,如果當時的位置不是專案目錄,那麼專案目錄中的模組就不會被找到,因此執行的時候報錯:ImportError: No Module named ...

具體例子如下:

在上面的專案中有如下指令碼,執行trainingset_selection.py需要呼叫另一個目錄下的connect_db.py。如果在命令列中執行的時候會出現以下錯誤:

trainingset_selection.py的前8行如下:

__author__ = "Arkenstone"

import os
import sys
# get current working directory -- Better to set the PYTHONPATH env variable
# current_working_directory = "C:\Users\username\PycharmProjects\projectName"
# sys.path.append(current_working_directory) from connectDB.connect_db import extractDataFromDB

解決方法:
方法很簡單,就是把模組路徑提供給直譯器:

  1. (推薦) 把模組路徑放到環境變數中作為全域性變數(sys.path能掃描到)。
    新增PYTHONPATH = /path/to/your/module

  2. 顯式的在執行的指令碼中新增
    把上面程式碼中的第6, 7行的註釋去掉就是了,效果同上。

    import sys
    sys.path.append('/path/to/your/module'
    )

做完這些後再執行就不會報錯了。