Python从父包导入

2024-01-12

我在 Python 中导入时遇到了一些问题。

这是一个简单的例子来说明问题所在。

我有一个这样的目录结构:

app
|---__init__.py
|---sub_app
    |---__init__.py

代码:

应用程序/__init__.py

shared_data = {
    'data': 123
}

from sub_app import more_shared_data
print more_shared_data

应用程序/sub_app/__init__.py

more_shared_data = {
    'data': '12345'
}
from app import shared_data
print shared_data

但是我收到错误:

ImportError: No module named app

如何将shared_data字典导入app/sub_app/__init__.py?


您可以使用相对进口 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 .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python从父包导入 的相关文章

随机推荐