python-3.x - 导入模块列表

标签 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()

最佳答案

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

关于python-3.x - 导入模块列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59138127/

相关文章:

python - 在加载包时导入包的子模块

python - Bokeh 服务器应用程序 - ImportError

python - 如何为 PyQt 安装新的 QStyle?

python - 比较两个多维列表的一些问题

python - 从 pygame 中的二维列表渲染背景框类时出现问题

python - 为什么 Python Fabric 用连字符替换下划线?

python-3.x - 从RabbitMQ获取消息而不消耗

Python 模块在 bash 中返回错误,但不在 IDLE 中返回错误

python - 导入错误 : cannot import name 'ImageTK'

python - python应用程序中脚本目录的成语?