我正在编写一个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。
答案 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
。这使我可以对该目录中的文件夹使用相对导入。