您可以使用相对进口 https://docs.python.org/2/tutorial/modules.html#intra-package-references为了这 。例子 -
In your app/sub_app/__init__.py
-
more_shared_data = {
'data': '12345'
}
from .. import shared_data
print shared_data
这应该适用于您提供的简单示例,但它确实会导致循环导入,app
正在导入sub_app
and sub_app
正在导入app
.
对于更复杂的用例,在定义特定元素之前,您可能会遇到错误(如果导入 sub_app),然后在sub_app/__init__.py
您尝试导入 app 并使用仅在 import 语句之后定义的那些元素sub_app
。一个非常简单的例子,它会导致问题 -
app/__init__.py
-
from .sub_app import more_shared_data
print(more_shared_data)
shared_data = {
'data': 123
}
app/sub_app/__init__.py
-
more_shared_data = {
'data': '12345'
}
from .. import shared_data
print(shared_data)
现在,如果您尝试导入app
,你会得到错误 -
>>> import app
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<some file>\__init__.py", line 1, in <module>
from .shared import more_shared_data
File "<some file>\sub_app\__init__.py", line 4, in <module>
from .. import shared_data
ImportError: cannot import name 'shared_data'
你应该重新考虑一下如果shared_data
确实属于app/__init__.py
,或者可以将其移动到sub_app/__init__.py
然后从那里导入app
.