我有一个模块mymodule
,它有几个子模块,比如
mymodule/
__init__.py
module1.py
module2.py
...
由于副作用的原因,我需要在导入mymodule
时运行所有这些子模块。
我尝试将以下内容添加到__init__.py
from . import *
但是这不起作用(当mymodule
被导入时子模块没有被导入)
我解决了使用pkgutil
,如问题的答案所述
我的问题是:
为什么from . import *
不像人们期望的那样工作?
(当from . import module1
的示例工作正常时)
参见from module import *
上的Python文档
命令from module import *
实际上并没有导入module
中的所有名称,而是导入模块中__all__
变量中列出的所有名称。
并引用python文档
如果没有定义
__all__
,语句from sound。effects import *不会将sound.effects
包中的所有子模块导入当前命名空间;它只确保包sound.effects
已经导入(可能在__init__.py
中运行任何初始化代码),然后导入包中定义的任何名称。这包括__init__.py
定义的任何名称(以及显式加载的子模块)。它还包括由前面的import语句显式加载的包的任何子模块。