如何根据Python 3中的变量值导入模块?

时间:2012-04-23 02:10:35

标签: python-3.x

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

for name in addons:
    import name

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

2 个答案:

答案 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')