Python模块导入报错:ModuleNotFoundError: No module named 'backbones' 求解
问题原因及解决方法
核心原因
直接运行models/builder.py时,Python会自动把models目录加入模块搜索路径(sys.path),所以from backbones import c3d能找到同级的backbones文件夹。但运行根目录下的main.py时,sys.path仅包含项目根目录,此时backbones是models的子目录,不在搜索路径范围内,因此会触发模块找不到的错误。
解决方法
方法1:使用相对导入(推荐)
修改builder.py中的导入语句,改用相对路径指向同包内的子模块:
# models/builder.py from .backbones import c3d from .heads import i3d
这种方式基于当前模块所在的models包定位子模块,无论从哪个入口调用都能正确解析路径。
方法2:确保所有目录都有__init__.py
确认以下目录下都存在空的__init__.py文件(文件名必须是双下划线开头和结尾,不能拼写错误):
models/models/backbones/models/heads/
该文件是Python识别包的标志,缺少会导致子模块无法被正确识别为包的一部分。
方法3:手动添加项目根目录到搜索路径(应急方案)
如果暂时不想修改导入语句,可在main.py开头添加代码,将项目根目录加入sys.path:
# main.py import sys import os # 获取当前文件所在的项目根目录路径 root_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.append(root_dir)
不过这种方式不够规范,长期维护优先推荐方法1。
内容的提问来源于stack exchange,提问作者Neskelogth
相关产品推荐
相关产品推荐

