之前遇到一個問題,在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
解決方法:
方法很簡單,就是把模塊路徑提供給解釋器:
-
(推薦) 把模塊路徑放到環境變量中作為全局變量(sys.path能掃描到)。
添加PYTHONPATH = /path/to/your/module
-
顯式的在運行的腳本中添加
把上面代碼中的第6, 7行的注釋去掉就是了,效果同上。
import sys
sys.path.append('/path/to/your/module')
做完這些后再運行就不會報錯了。
參考: