1

我正在寻找一种为我要编写的 Python 3 程序编写插件系统的方法。该程序在初始化所有其他内容后,将使用用户提供的列表导入选定的插件(带有代码和/或函数的 Python 脚本)。然后插件将对程序进行所需的更改。该系统的一个非常简单的实现如下所示:

for name in addons:
    import name

现在,当然,这个例子不起作用,因为 Python 解释器会尝试导入一个名为“name”的模块。我的问题是,如何使用变量来导入模块?或者,如果我不能这样做,实现插件系统的最佳方式是什么?

4

2 回答 2

3

插件系统可以简单到插件将自身或相关对象/方法添加到某个全局列表中。

在另一端有诸如 zope.component 架构之类的东西,您可以在其中将您的应用程序变成组件,其中插件不仅可以将自己添加到列表中,还可以替换应用程序的一部分。zope.component很酷。:-)

但是,是的,无论如何您都需要在某个地方导入插件/组件。

在 Python 3 中,我会使用importlib.import_module(). importlib也可用于 Python 2,并且包含在 Python 2.7 中,但如果您不想要更多依赖项,您可以考虑使用__import__()所有版本的 Python 中都存在的依赖项。

import_module()__import__(), as 更容易使用,我在使用之前总是需要考虑它。

于 2012-04-23T07:11:05.237 回答
1

我建议__import__()在 Lennarts 的回答中使用 as Mentionend。这是一个例子:

csv = __import__('csv')
于 2012-04-23T08:33:36.020 回答