Sto lavorando su un sistema di plugin in cui moduli plugin sono caricati in questo modo:Classe dinamica in Python 2.6: RuntimeWarning: modulo Parent 'plugins' non trovato durante la manipolazione di importazione assoluta
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
il codice funziona, ma per ogni istruzione import nel codice del plugin Ho ricevuto un avviso simile a questo:
plugins/plugin.py:2: RuntimeWarning: Parent module 'plugins' not found while handling absolute import
import os
Nessun errore vengono segnalati per il codice del programma principale, e il lavoro plugin.
Qualcuno può spiegare cosa significa l'avvertimento e cosa sto facendo male. Devo creare un modulo plugin vuoto separatamente e importarlo per mantenere Python felice?
per la cronaca: ' 'plugins'' in' modulo Parent' i plugin 'non trovati' provengono dal valore 'name' passato a [imp.load_module] (https://docs.python.org/2/library/imp.html#imp.load_module), ad es. '" plugins.something "' in 'imp.load_module (" plugins.something ")'. Nel mio caso il valore 'name' era come' ".qualcosa" 'e quindi il messaggio conteneva' '' 'invece di' 'plugins''. – n611x007