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)
我发现很多动态导入 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)