导入模块列表

时间:2019-12-02 11:35:23

标签: python-3.x python-import

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

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

# 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()需要什么?

1 个答案:

答案 0 :(得分:2)

main.py中,可以对列表中包含元素的格式化字符串使用was released at Jan 5, 2013,例如:

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}')