导入模块列表

import a list of modules

我有一些插件系统,所有插件都可以简单地添加到一个文件夹中。

现在我手动导入它们,像这样:

# main.py
from modules.AA import aa
from modules.BB import bb
from modules.CC import cc
from modules.DD import dd
...

但我想让它更具动态性,所以我可以将所有内容都导入到列表中 ['aa', 'bb', 'cc', 'dd',... ]

文件夹结构:

main.py
 /modules/__init__.py
 /modules/AA.py
 /modules/BB.py
 /modules/CC.py
...

我可以将其添加到

__init__.py : __all__ = ['aa', 'bb', 'cc', 'dd']

但是我必须像 AA.aa()

这样调用函数

简单地调用 aa() 需要什么?

main.py 中,您可以在带有列表元素的格式化字符串上使用 exec,例如:

attributes = ['aa', 'bb', 'cc', 'dd']

for attribute in attributes:
    exec(f'from modules.{attribute.upper()} import {attribute}')

如果不能从属性名称派生模块名称,您当然可以使用单独的列表(或者 dict,如果您愿意):

modules = ['AA', 'BB', 'CC', 'DD']
attributes = ['aa', 'bb', 'cc', 'dd']

for module, attribute in zip(modules, attributes):
    exec(f'from modules.{module} import {attribute}')