我已经制作了一个可以加载插件的
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)
这也给了我正确的数据但是我无法以这种方式加载模块,或者至少我不知道如何
问候
安德斯
最佳答案 找到了解决方案.显然在调试模式下,我背后会导入更多模块.我通过添加导入来修复它.
import importlib.machinery
问候
安德斯