您可以使用
相对导入来实现这一点。例如 -
在您的
app/sub_app/__init__.py
中 -
more_shared_data = {
'data': '12345'
}
from .. import shared_data
print shared_data
这应该适用于您提供的简单示例,但它会导致循环导入,即
app
正在导入
sub_app
,而
sub_app
正在导入
app
。
对于更复杂的用例,您可能会在定义特定元素之前(如果您导入sub_app)遇到错误,然后在
sub_app/__init__.py
中尝试导入app并使用那些仅在
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
中。请重新思考一下。