我正在寻找一种方法来编写我将要编写的Python 3程序的插件系统。在初始化其他所有内容之后,程序将使用用户提供的列表导入选定的插件(带有代码和/或函数的Python脚本)。然后,插件将对程序进行必要的更改。 非常系统的简单实现如下所示:
for name in addons:
import name
现在,当然,这个例子不起作用,因为Python解释器将尝试导入名为“name”的模块。我的问题是,如何使用变量导入模块?或者,如果我不能这样做,那么实现插件系统的最佳方法是什么?
答案 0 :(得分:3)
插件系统可以像插件将自己或相关对象/方法添加到某个地方的全局列表一样简单。
另一方面,有一些类似zope.component架构的东西,你可以将你的应用程序变成组件,其中插件不能只将自己添加到列表中,而是替换部分应用程序。 zope.component cool 。 : - )
但是,无论如何,你需要在某处导入插件/组件。
在Python 3中,我会使用importlib.import_module()
。 importlib
也适用于Python 2,并且包含在Python 2.7中,但如果您不想要更多依赖项,则可以考虑使用所有版本的Python中存在的__import__()
。
import_module()
比__import__()
更容易使用,因为我在使用之前总是需要思考。
答案 1 :(得分:1)
我建议在Lennarts答案中使用__import__()
作为提及。这是一个例子:
csv = __import__('csv')