Python 从动态创建的模块中导入所有 *

Python import all * from dynamically created module

我发现很多动态导入 created/named 模块的变体是通过引用它们的名称作为文本,但是所有这些都将模块作为一个整体导入并且似乎不利于导入所有 * ....

在我的例子中,文件中的对象是动态创建和命名的,因此无法事先发现它们的身份。

这行得通,但是有没有更好的方法也许使用 importlib ?

PREFIX = "my_super_new"

active_data_module = "{0}_data_module".format(PREFIX)

exec("from {0} import *".format(active_data_module))

您可以将 vars 与模块一起使用。这将 return 模块上所有属性的字典(我认为)。然后你可以将字典分配给 globals 字典,使其在当前模块中可访问:

import importlib

PREFIX = "my_super_new"
active_data_module = "{0}_data_module".format(PREFIX)

module = importlib.import_module(active_data_module)

globals().update(vars(module))

根据 Peter Wood 的回答,我创建了一个小实用函数:

import importlib

def import_everything_from_module_by_name(module_name):
    globals().update(vars(importlib.import_module(module_name)))

modules_for_import = [
    module_a,
    module_b,
    module_c
    ]

for module_name in modules_for_import:
    import_everything_from_module_by_name(module_name)