我正在编写一个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
谢谢
更新:对不起,错误来自其他地方我在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和B.软件包B无法通过相对导入访问软件包A的内容,因为它无法移动到top-lvevel软件包之外。在你的情况下,两个包都是顶级的。
您需要重新组织项目,例如那样
.
├── 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__":
我的问题是在我的顶级目录中忘记了__init__.py
。这允许我对该目录中的文件夹使用相对导入。