在python 3.4中从imp转换为importlib时出现的问题

时间:2015-10-07 08:26:05

标签: python python-3.x pycharm python-importlib

我已经制作了一个可以加载插件的Python应用程序。这些插件基于名称和路径加载。

我目前正在使用

pluginModule = imp.load_source(pluginModuleName,  pluginModulePath)

然后以这种方式在模块中获取类实例

# Load the module class and initialize it.
if hasattr(pluginModule, pluginClassName):
  try:
    pluginClassInst = getattr(pluginModule, pluginClassName)()
  except Exception as e:
    errorMsg = ('In plugin module [{}], {}'.format(os.path.basename(pluginModulePath), e))
    exceptionTracePrint(self._log)
    self._log.error(errorMsg)
    continue

由于不推荐使用imp lib,我想使用importlib。获取我的类实例的唯一类似方法是使用

pluginModule = importlib.machinery.SourceFileLoader(pluginModuleName, pluginModulePath).load_module()

这里奇怪的是(我使用pyCharm作为IDE)。当我在调试模式下运行我的代码时,上面的命令工作正常,我得到了我的类实例。但是运行代码通常会给我以下错误。

pluginModule = importlib.machinery.SourceFileLoader(pluginModuleName, pluginModulePath).load_module()
AttributeError: 'module' object has no attribute 'machinery'

为什么运行和调试之间存在差异。 有没有其他方式做我想要的。

我也试过

pluginModuleTmp = importlib.util.spec_from_file_location(pluginModuleName, pluginModulePath)

这也给了我正确的数据,但是我无法以这种方式加载模块或者至少我不知道如何

此致 安德斯

1 个答案:

答案 0 :(得分:2)

找到解决方案。显然在调试模式下,我背后会导入更多模块。我通过添加导入来修复它。

import importlib.machinery

此致 安德斯