我有一个应该自动以动态方式导入的模块列表。 这是我的代码的一个片段:
for m in modules_to_import:
module_name = dirname(__file__)+ "/" +m
spec = importlib.util.spec_from_file_location("package", module_name)
imported_module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(imported_module)
我测量了时间,每次导入后它变得越来越慢。有解决方案吗?为什么它变慢了?非常感谢!
答案 0 :(得分:0)
我还没有计时,但是为什么不简化代码。查看您的代码,您想要导入与该文件位于同一目录中的模块。默认情况下,导入模块时,该模块将首先查找。
首先,让我们创建一些文件以将所有文件导入同一目录:
First.py
def display_first():
print("I'm first")
Second.py
def display_second():
print("I'm second")
Third.py
def display_third():
print("I'm third")
因此,一种实现方法是将模块放入字典中,然后可以使用。我在这里使用字典理解来构建该字典:
Solution1.py
import importlib
modules_to_import = ["First", "Second", "Third"]
modules_imported = {x: importlib.import_module(x) for x in modules_to_import}
modules_imported["First"].display_first()
modules_imported["Second"].display_second()
modules_imported["Third"].display_third()
或者,如果您真的想使用点分符号来访问模块的内容,则可以使用named tuple来提供帮助:
Solution2.py
import importlib
import collections
modules_to_import = ["First", "Second", "Third"]
modules_imported = collections.namedtuple("imported_modules", modules_to_import)
for next_module in modules_to_import:
setattr(modules_imported, next_module, importlib.import_module(next_module))
modules_imported.First.display_first()
modules_imported.Second.display_second()
modules_imported.Third.display_third()