1.问题描述:
有时候在Windows下的cmd命令行或者是在虚拟机的终端中,我们跑一个在pycharm等IDE中可以成功运行的py程序却会遇到问题,比如:
这个程序我在pycharm中是可以跑通的,但是在终端中使用命令就出现了ModuleNotFoundError。
2.问题分析
提示自定义的模块不存在时,一般都是路径获取不正确导致未正常找到相应的模块,顺应这个思路看看哪些代码中涉及到模块路径
我们自定义的模块,python都是通过搜索路径里面的路径逐个寻找的;找不到的话就说明搜索路径中不包含我们自定义模块的准确路径,我们可以在报错的那行代码之前添加print(sys.path)打印出当前python的搜索路径,我分别在pycharm和终端下都打印了一下,结果如下:
pycharm的输出
终端的输出
运行的代码在比较上述的搜索路径可以发现,pycharm中的搜索路径中有当前项目路径‘/home/sunkun/standalone-fate-master-1.4.3’,而终端打印出的搜索路径却没有。
3.问题根源
是什么原因导致了这个问题?按正常理解来说在IDE里面能运行,在命令窗口里也照样能运行,都是执行的同一份文件。
这是因为Python在启动解释器(Interpreter)的时候不只会导入环境变量中sys.path发现的模块,还会导入当前工作目录下的模块。当你在IDLE中启动解释器时,当前的工作目录就是项目目录,能顺利调用同项目中的模块;但是当你通过命令行启动时,当前工作目录为你启动解释器时所在的目录(即python的安装目录),如果当时的位置不是项目目录,那么项目目录中的模块就不会被找到。
4.解决方法
方法一
在环境变量中添加项目路径。
方法二
在运行的py文件中通过sys.path.append(‘项目路径’)来添加搜索路径。