在 python 3.4 中从 imp 转换为 importlib 时出现问题
Problems when converting from imp to importlib in python 3.4
我制作了一个可以加载插件的 Python 应用程序。这些插件是根据名称和路径加载的。
我目前正在使用
pluginModule = imp.load_source(pluginModuleName, pluginModulePath)
然后以这种方式在模块中获得一个 class 实例
# 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。获取我的 class 实例的唯一类似方法是使用
pluginModule = importlib.machinery.SourceFileLoader(pluginModuleName, pluginModulePath).load_module()
这里的奇怪之处在于(我将 pyCharm 用作 IDE)。当我 运行 我的代码处于调试模式时,上面的命令工作正常并且我得到了我的 class 实例。然而 运行ning 代码通常会给我以下错误。
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
问候
安德斯
我制作了一个可以加载插件的 Python 应用程序。这些插件是根据名称和路径加载的。
我目前正在使用
pluginModule = imp.load_source(pluginModuleName, pluginModulePath)
然后以这种方式在模块中获得一个 class 实例
# 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。获取我的 class 实例的唯一类似方法是使用
pluginModule = importlib.machinery.SourceFileLoader(pluginModuleName, pluginModulePath).load_module()
这里的奇怪之处在于(我将 pyCharm 用作 IDE)。当我 运行 我的代码处于调试模式时,上面的命令工作正常并且我得到了我的 class 实例。然而 运行ning 代码通常会给我以下错误。
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
问候 安德斯