我有一个python包的顶层 __init__.py 中定义了大量名称。 我想使用 相对 导入来导入此命名空间,因为在运行时我不一定知道包名称(它甚至可能被用作其他包的子包)。例如,考虑以下包:
my_package/
__init__.py
a = 1
b = 2
...
my_module.py
from . import ??? as my_package
print(my_package.a)
我该如何修复my_module中的导入语句,以使print语句正常工作?我也想避免使用
from . import a, b, ...
; 我只想将整个包命名空间作为一个变量导入。我尝试过
from . import __init__ as my_package
,但在这种情况下,my_package
被导入为一个方法包装器,而不是一个模块。我还尝试过my_module = __import__(__package__)
,但这仅适用于my_package不是子包的情况。看起来应该有一个简单的答案...
__init__.py
中,而不是将其作为单独的模块? - BrenBarn__init__.py
文件是一个罕见的地方,如果您希望使子模块中的所有公共名称在包中也直接可访问,则可以适用from submodule import *
。正如@BrenBarn所说,只需将其放入单独的模块中,然后您就可以在my_module
中使用from . import submodule
。 - jfs