我目前正在使用 python 开发一个项目。我有以下目录树结构(我剪切了所有 venv 子文件夹)。
在 models 文件夹中有一个名为 builder 的文件,其中包含类
Builder
。这个类需要里面的c3d和i3d类,分别是backbones和heads文件夹。
为了测试,我尝试在构建器文件中添加对 Builder
构造函数的调用,它似乎工作得很好,但是当我尝试在主体中构造一个 Builder
时,它给了我错误 ModuleNotFoundError: No module named 'backbones'
为了向您提供代码应该如何工作的示例,在 c3d 和 i3d 文件中我有一些来自 pytorch 的导入,在构建器中我有
from backbones import c3d
和 from heads import i3d
,而在 main 中我有 from models.builder import Builder
.
我发现一些老问题说创建一个 init.py 文件应该足以解决这个问题,因为 python 在导入模块时会查找这些文件,但我没有完全理解它,另外正如你在图片中看到的我尝试应用此解决方案,但仍然无效。有人可以帮助我了解我做错了什么以及我应该如何确保可以解决这个问题?
在包内工作时使用相对导入。
假设您使用
main.py
作为入口点(即main.py
所在的目录作为顶部),使用绝对导入,from backbones import c3d
将找不到backbones
。你必须说from models.backbones import c3d
。您也可以使用 relative import 代替:from .backbones import c3d
.