我得到一个错误 Attempted relative import Beyond top-level package

Chi*_*mwe 5 python python-3.x

我正在编写一个 python 应用程序并尝试管理结构中的代码。

我拥有的目录结构类似于以下内容:-

package/
   A/
     __init__.py
     base.py
   B/
     __init__.py
     base.py
app.py
__init__.py
Run Code Online (Sandbox Code Playgroud)

所以我在 A/ init .py 中有一行写着

from .base import *
Run Code Online (Sandbox Code Playgroud)

没问题,但是当我在 B/ init .py 中放入同一行时

from .base import *
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

E0402: Attempted relative import beyond top-level package.
Run Code Online (Sandbox Code Playgroud)

两者不应该是一模一样的吗?我到底做错了什么?

我使用的是 Python 3.6,我运行应用程序的方式是从终端使用

> python app.py
Run Code Online (Sandbox Code Playgroud)

谢谢

更新:对不起,错误来自其他地方。

在 A/base.py 我有

class ClassA():
  ...
Run Code Online (Sandbox Code Playgroud)

在 B/base.py 我有

from ..A import ClassA

class ClassB(ClassA):
  ...
Run Code Online (Sandbox Code Playgroud)

错误来自 B/base.py 中的导入语句

from ..A import ClassA
Run Code Online (Sandbox Code Playgroud)

更新 #2 @JOHN_16 app.py 如下:-

from A import ClassA
from B import ClassB

if __name__ == "__main__":
  ...
Run Code Online (Sandbox Code Playgroud)

还按照建议更新了目录以包含空的init .py。

JOH*_*_16 8

这是因为您有两个包:AB。包B无法通过相对导入访问包A 的内容,因为它无法移出顶级包。在你的情况下,这两个包都是顶级的。

你需要重新组织你的项目,例如这样

.
??? TL
?   ??? A
?   ?   ??? __init__.py
?   ?   ??? base.py
?   ??? B
?   ?   ??? __init__.py
?   ?   ??? base.py
?   ??? __init__.py
??? app.py
Run Code Online (Sandbox Code Playgroud)

并更改内容 pf 您app.py以使用包 TL:

from TL.A import ClassA
from TL.B import ClassB

if __name__ == "__main__":
Run Code Online (Sandbox Code Playgroud)