同级目录模块导入类时遇ModuleNotFoundError问题求助
错误原因
Python查找模块的路径是基于脚本执行时的工作目录和sys.path列表来定位的:
- 运行moduleB内的
driver_script_B.py时,当前工作目录就是moduleB,所以from function_c import function_c能直接找到同目录下的function_c.py。 - 运行moduleA内的
driver_script_A.py时,当前工作目录是moduleA,Python会在sys.path里找名为function_c的顶级模块,但此时sys.path里只有..(即parent_dir)和默认路径,function_c.py在moduleB目录下,不属于顶级模块,所以找不到。
解决方法
推荐用规范的包内导入方式,有两种可靠方案:
方案1:使用相对导入(推荐,符合包内模块引用规范)
修改class_B.py里的导入语句,用相对路径引用同包内的function_c:
from .function_c import function_c
这里的.表示当前模块所在的包(即moduleB),Python会自动在moduleB目录下查找function_c.py,不管从哪个路径导入class_B都能正常工作。
方案2:使用绝对导入
如果习惯用绝对路径导入,修改class_B.py的导入语句为:
from moduleB.function_c import function_c
因为你在driver_script_A.py里已经把parent_dir(..)加入了sys.path,moduleB作为parent_dir下的顶级包,Python能直接找到它下面的function_c模块。
额外注意
你的代码里存在一处笔误:class_B.py里定义的类是class B:,但driver_script_A.py里写的是from module_B.class_B import class_B,应该改成from module_B.class_B import B,否则会出现ImportError。
内容的提问来源于stack exchange,提问作者user1298521
相关产品推荐
相关产品推荐

