为什么不从.导入* '导入所有子模块?



我有一个模块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语句显式加载的包的任何子模块。

相关内容

  • 没有找到相关文章

最新更新