【发布时间】:2011-01-17 02:25:26
【问题描述】:
我正在开发一个插件系统,插件模块的加载方式如下:
def load_plugins():
plugins=glob.glob("plugins/*.py")
instances=[]
for p in plugins:
try:
name=p.split("/")[-1]
name=name.split(".py")[0]
log.debug("Possible plugin: %s", name)
f, file, desc=imp.find_module(name, ["plugins"])
plugin=imp.load_module('plugins.'+name, f, file, desc)
getattr(plugin, "__init__")(log)
instances=instances+plugin.get_instances()
except Exception as e:
log.info("Failed to load plugin: "+str(p))
log.info("Error: %s " % (e))
log.info(traceback.format_exc(e))
return instances
代码有效,但是对于插件代码中的每个导入语句,我都会收到如下警告:
plugins/plugin.py:2: RuntimeWarning: Parent module 'plugins' not found while handling absolute import
import os
主程序代码无报错,插件正常运行。
有人可以解释警告的含义以及我做错了什么。我是否需要单独创建一个空的插件模块并导入它以保持 python 快乐?
【问题讨论】:
-
备案:
'plugins'inParent module 'plugins' not found来自传递给imp.load_module 的name值,例如。"plugins.something"在imp.load_module("plugins.something")。在我的情况下,name的值类似于".something",因此消息包含''而不是'plugins'。
标签: python plugins import dynamic-class-loaders