解決python在命令行中運行時導入包失敗,出現錯誤信息 "ModuleNotFoundError: No module named ***"
轉自https://www.cnblogs.com/dreamyu/p/7889959.html
https://www.cnblogs.com/lifeofershisui/p/8135702.html
大家可能知道我們的工程在IDE(Pycharm)中運行和我們在cmd中運行的路徑是不一樣的,在pycharm中運行時,
會默認pycharm的目錄+我們的工程所在目錄為運行目錄,而在cmd中運行時,會以我們的工程目錄所在目錄來運行
而在import包時,會首先從pythonPATH的環境變量中來查看包,如果沒有你的PYTHONPATH中所包含的目錄沒有
工程目錄的根目錄,那么你在導入不是同一個目錄下的其他工程中的包時會出現import錯誤
解決方法:在你運行的文件中將你的工程目錄加入到PYTHONPATH中,具體方法如下:
import os,sys
sys.path.append("path") //path為你的工程根目錄的絕對路徑
如果此時你運行時依然報錯,請先檢查是否將根目錄加入到了PYTHONPATH中,方法為:
import os
PATH = os.environ
for key in PATH:
print(key,PATH[key])
其他設置PYTHONPATH方法:
PYTHONPATH是Python搜索路徑,默認我們import的模塊都會從PYTHONPATH里面尋找。
打印PYTHONPATH:
import os print sys.path >['', '/usr/local/lib/python2.7/dist-packages/dlib-19.4.0-py2.7-linux-x86_64.egg', '/home/ershisui',...]
注意:sys.path 也可以用 os.sys.path 替換,兩個應該是同一個命令,推薦使用sys.path, 因為 os.sys.path 在python document 中好像沒有提及.
設置PYTHONPATH:
-
方法一:命令窗口添加路徑
export PYTHONPATH=$PYTHONPATH:/home/ershisui
注意:此方法只在當前命令窗口生效,即如果打開一個新的Terminal 窗口,定位到當前目錄, 打印PYTHONPATH 是沒有剛才加入的路徑的.
-
方法二:在python 中添加:
import sys sys.path.append('/home/ershisui/')
實例
-
Tensorflow 的 object detection API 模塊中安裝教程中
即添加了python 路徑:(pwd 是輸出當前目錄的命令,這里為什么可以這樣,還不懂)添加了兩個路徑,分別為 /home/.../models-master/research 和 /home/.../models-master/research/slim(可以驗證在research 文件夾下有slim 文件)export PYTHONPATH=$PYTHONPATH:`pwd`:'pwd'/slim
-
Tensorflow 的 object detection API 模塊中object_detection_tutorial.ipynb 中
sys.path.append("..")
即在python 中添加了新的搜索目錄,即當前目錄的上一層(在這里應該是 /home/.../models-master/research)