我收到错误尝试相对导入超出顶级包

时间:2018-04-23 12:59:24

标签: python python-3.x

我正在编写一个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。

2 个答案:

答案 0 :(得分:1)

这是因为您有两个软件包: A B 。包 B 无法通过相对导入访问包 A 的内容,因为它无法移到top-lvevel包之外。在这种情况下,两个包都是顶级包。

您需要重新组织项目,例如

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

if __name__ == "__main__":

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

data.features.filter(feature => feature.geometry.type === 'LineString')

答案 1 :(得分:0)

我的问题是忘记了我的顶级目录中的__init__.py。这使我可以对该目录中的文件夹使用相对导入。