我正在编写一个 python 应用程序并尝试在结构中管理代码。
我的目录结构如下所示:-
package/
A/
__init__.py
base.py
B/
__init__.py
base.py
app.py
__init__.py
所以我在 A/ 中有一行init.py 说
from .base import *
没问题,但是当我将同一行放入 B/ 时init.py
from .base import *
我收到一个错误
E0402: Attempted relative import beyond top-level package.
两者不是应该是一样的吗?我到底做错了什么?
我使用的是 Python 3.6,我运行应用程序的方式是从终端使用
> python app.py
Thanks
更新:
抱歉,该错误来自其他地方。
在 A/base.py 我有
class ClassA():
...
在 B/base.py 中我有
from ..A import ClassA
class ClassB(ClassA):
...
错误来自 B/base.py 中的 import 语句
from ..A import ClassA
更新#2
@JOHN_16 app.py 如下:-
from A import ClassA
from B import ClassB
if __name__ == "__main__":
...
还更新了目录以包含空目录init.py 按照建议。
发生这种情况是因为您有两个包:A and B。包裹B无法访问包的内容A通过相对导入,因为它无法移动到顶级包之外。在你的情况下,两个包都是顶级的。
你需要组织你的项目,例如像这样
.
├── TL
│ ├── A
│ │ ├── __init__.py
│ │ └── base.py
│ ├── B
│ │ ├── __init__.py
│ │ └── base.py
│ └── __init__.py
└── app.py
并改变你的内容app.py
使用 TL 包:
from TL.A import ClassA
from TL.B import ClassB
if __name__ == "__main__":
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)