背景描述:
当在idea编写python文件导入上级其它同级目录下文件时,编码检查及行行正常,但在linux远程使用命令执行报“ModuleNotFoundError: No module named 模块名”错误。
项目目录结构及执行脚本如下:
原因:
首先,了解os和sys的区别:
os: 这个模块提供了一种方便的使用操作系统函数的方法。如:os.path.exists() 是否存在,
sys: 这个模块可供访问由解释器使用或维护的变量和与解释器进行交互的函数。如:sys.argv 命令行参数List,第一个元素是程序本身路径
总结:os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
提示自定义的模块不存在时,一般都是路径获取不正确导致未正常找到相应的模块。可以在代码首部新增一行 print (sys.path),把路径全部打印出来确认,查看是否包含模块目录,不包含,所以就报找不到该模块。
解决方案:
注意:根据前面介绍的os和sys的区别了解,这里导入的是当前系统路径的父目录,而非当前文件的父目录。意思就是你需要cd 到该脚本文件路径下执行才没问题,即此时体统路径和脚本路径一致,而如果你在该文件的父目录执行该文件,如python train/train.py, 则又会报错。
错入如下:
正确:
参考文章: