最近遇到一个问题,原本在Idea上运行正常的python脚本,但是在用cmd命令行运行的时候报了模块未能找到的错误:
File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'model'
当我们导入一个模块时:import xxx 或者 from xx import xxx,默认情况下python解析器(Interpreter)会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中。
当你在使用Idea启动解释器时,当前的工作目录就是项目目录,能顺利调用同项目中的模块。但是当你通过cmd命令行启动时,当前工作目录为你启动解释器时所在的目录,如果当时的位置不是项目目录,那么项目目录中的模块就不会被找到,因此运行的时候会报模块未能找到的错误。
解决方案:
1. 在运行脚本中显示的添加模块路径(推荐,灵活性更好)
import sys
# 1.表示导入当前文件的上层目录到搜索路径中
sys.path.append('..')
# 2.绝对路径
sys.path.append('/project/model')
from XX import XXX
2. 把模块路径放到环境变量中作为全局变量(sys.path能扫描到)。
添加 PYTHONPATH = /path/to/your/module
参考:
https://blog.youkuaiyun.com/dcrmg/article/details/79546962
http://www.itdaan.com/blog/2016/08/12/810dde029b23e646a35e32f465a499d9.html