好的,我的主应用程序(main.py
)
from Modules.Core import Core1
print Core1.HouseNumber()
以及Core1.py
中的代码:
from ..Engine import Engine1
def HouseNumber():
house = Engine1.BadLuck()
return house
Engine1.py
中的此代码:
def BadLuck():
return 13
这项工作完全没有任何问题,好吧
现在,这里有趣的部分,我在Widget1.py
def door():
return 'black'
和Core2.py
中的此代码:
from ...Widgets import Widget1
def DoorColor():
door = Widget1.door()
return door
如果我将main.py
更改为:
from Modules.Core import Core1, Core2
print Core1.HouseNumber()
print Core2.DoorColor()
我收到此错误:Attempted relative import beyond toplevel package
。
好的,现在如果我从云端硬盘Main.py
中的ProjectX
中取出D
,并将main.py
代码更改为:
from ProjectX.Modules.Core import Core1, Core2
print Core1.HouseNumber()
print Core2.DoorColor()
它完美地工作。
好的,我理解,如果我from Modules.Core import Core1, Core2
表示Modules
是我的顶级,但ProjectX
甚至不包括__init__.py
到文件夹结构。
这是我的问题:
有没有办法在
main.py
中定义顶级文件夹而不移动主文件?
注1:也可以通过添加完整路径来解决问题:from ProjectX.Modules.Core import Core1
和from ProjectX.Widgets import Widget1
,但这不是最佳解决方案,因为我必须{{1}我认为有一种聪明的方式。
注1:我还在sys.path.append()
的{{1}}内添加了__all__
:
__init__.py
我没有得到任何结果 我确实包含上面的例子here用于下载/学习。
答案 0 :(得分:1)
您的CoreX.py
文件中不需要相对导入。
只需更改Core2.py
:
-from ...Widgets import Widget1
+from Widgets import Widget1
注意:您可以重构导入以删除所有相对导入。
diff --git a/Modules/Core/Core1.py b/Modules/Core/Core1.py
index a0650fc..c6109e6 100644
--- a/Modules/Core/Core1.py
+++ b/Modules/Core/Core1.py
@@ -1,4 +1,5 @@
-from ..Engine import Engine1
+from Modules.Engine import Engine1
+
def HouseNumber():
house = Engine1.BadLuck()
- return house
\ No newline at end of file
+ return house
diff --git a/Modules/Core/Core2.py b/Modules/Core/Core2.py
index 2638734..b131d1f 100644
--- a/Modules/Core/Core2.py
+++ b/Modules/Core/Core2.py
@@ -1,4 +1,6 @@
-from ...Widgets import Widget1
+from Widgets import Widget1
+
def DoorColor():
door = Widget1.door()
- return door
\ No newline at end of file
+ return door