我正在编写一个 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。
这是因为您有两个包:A和B。包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)
| 归档时间: |
|
| 查看次数: |
8096 次 |
| 最近记录: |