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

在python 3.4中从imp转换为importlib时出现的问题,python,python-3.x,pycharm,python-importlib,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

我制作了一个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库已被弃用,我想使用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)
这也为我提供了正确的数据,但是我不能以这种方式加载模块,或者至少我不知道如何加载

问候
安德斯找到了解决办法。显然,在调试模式下,我会在背后导入更多的模块。我通过添加导入来修复它

import importlib.machinery
问候 安德斯