ich auf einem Plugin-System arbeite, wo Plugin-Module wie folgt geladen werden:Dynamische Laden von Klassen in Python 2.6: RuntimeWarning: Parent-Modul 'Plugins' nicht gefunden beim Umgang mit absolutem Import
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
Der Code funktioniert, aber für jede Import-Anweisung in dem Plugin-Code erhalte ich eine Warnung wie folgen aus:
plugins/plugin.py:2: RuntimeWarning: Parent module 'plugins' not found while handling absolute import
import os
keine Fehler für den Hauptprogrammcode gemeldet werden, und die Plug-in arbeiten.
Kann jemand erklären, was die Warnung bedeutet und was ich falsch mache. Muss ich ein leeres Plugins-Modul separat erstellen und es importieren, um Python glücklich zu machen?
der Ordnung halber: ' 'plugins'' in' Geordnetes Modul' plugins 'not found' kommt vom 'name'-Wert, der an [imp.load_module] (https://docs.python.org/2/library/imp.html#imp.load_module) übergeben wurde, z. '" plugins.something "' in 'imp.load_module (" plugins.something ")'. In meinem Fall war der 'name' Wert wie' ".etwas" 'und somit enthielt die Nachricht' '' 'anstelle von' 'plugins''. – n611x007