跨包导入模块时触发ModuleNotFoundError问题求助
Python模块导入报错问题
问题详情
我的文件夹结构如下:
app.py 中的代码:
from components import ControlFrame
ControlFrame.py 中的代码:
import MainFrame, OutputFrame, ButtonFrame, ControlFrame
单独运行ControlFrame.py一切正常,但运行app.py时出现如下报错:
Traceback (most recent call last): File "c:/Users/ehacimc/OneDrive - Ericsson/Desktop/KPI_GENERATOR/KPI_PPT_GENERATOR_CODE/src/app.py", line 19, in <module> from components import ControlFrame File "c:\Users\ehacimc\OneDrive - Ericsson\Desktop\KPI_GENERATOR\KPI_PPT_GENERATOR_CODE\src\components\ControlFrame.py", line 3, in <module> import MainFrame, OutputFrame, ButtonFrame, ControlFrame ModuleNotFoundError: No module named 'MainFrame'
解决方法
这是Python模块导入路径不匹配导致的问题:
- 单独运行ControlFrame.py时,Python的工作目录是
components文件夹,能直接找到同目录下的其他模块;但运行app.py时,工作目录是src文件夹,Python默认不会去components子目录找模块,因此报错。
你可以按以下方式修改:
使用相对导入(推荐,适合同包内模块引用):
修改ControlFrame.py的导入语句为:from . import MainFrame, OutputFrame, ButtonFrame # 注意:删除自身模块ControlFrame的导入,避免循环导入报错使用绝对导入:
基于项目的src目录结构,修改导入语句为:from components import MainFrame, OutputFrame, ButtonFrame确保包结构合法:
在components文件夹下创建一个空的__init__.py文件,让Python将该目录识别为可导入的包。
内容的提问来源于stack exchange,提问作者koky
相关产品推荐
相关产品推荐

