python3显式相对导入错误

问题描述

我正盯着我的python代码打包。 我的包裹结构是:

mypackage/
    __init__.py
    /subpackage
        __init__.py
        module1.py
        module2.py

在我的module2中,如果我使用绝对导入,例如:

from mypackage.subpackage import module1

这将起作用。

但是,如果我使用显式导入,如:

from . import module1

这给了我

ImportError:尝试了相对导入,但没有已知的父包


我对此进行了搜索,发现隐式相对导入效果不好。但是我的导入是显式的,它给了我这样的错误信息。 有人可以帮我理解为什么吗? 谢谢

解决方法

相对导入仅在包内部有效。如果您对实际的可执行代码(纯库)有mypackage的要求,并且使用了显式的相对导入,那就可以了。但是,如果您尝试直接运行module2,则代码会显示

找到__main__所在的程序包,找到其父级,并找到名为module1的ITS子级

这显然是胡说八道,因为__main__没有父(根据定义)