[Python-de] Dynamisch Module Nachladen wenn die Namen erst zur Laufzeit bekannt sind?

Andrew Smart subscriptions at smart-knowhow.de
Do Nov 15 14:51:38 UTC 2007


> -----Ursprüngliche Nachricht-----
> Von: python-de-bounces at python.net 
> [mailto:python-de-bounces at python.net] Im Auftrag von Hartmut Goebel
> Gesendet: Donnerstag, 15. November 2007 15:21
> An: Die Deutsche Python Mailingliste
> Betreff: Re: [Python-de] Dynamisch Module Nachladen wenn die 
> Namen erst zur Laufzeit bekannt sind?
> 
> Hallo,
> 
> > Modul finden:
> > (file, pathname, description) = imp.find_module(sModName, dirnames)
> 
> Interessant wäre noch, eine Liste der Modul in einem 
> Verzeichnis zu bekommen. Irgendwelche Ideen ausser 
> glob.glob('*.py') (und ähnliches)?

Ich hab so ein Plugin-System bereits mal implementiert (der Codeauszug ist
aus dem Modul):

Ich suche alle Dateien mit ".py" in einem Verzeichnis und versuche das Modul
zu laden (try/except). Klappt das dann wird das Modul einer Liste von
Modulen hinzugefügt auf die man später generisch verweisen kann.

Zusätzlich habe ich noch Funktionen gebaut die die Doc-Strings nach
bestimmten Mustern durchsuchen um z.B. speziell gekennzeichnete Klassen noch
vor der Instanziierung identifizeren und gesondert behandeln zu können. Die
Idee war das in einem Modul eine beliebig benannte Klasse als "Factory"
gekennzeichnet und in einer gesonderten Liste gehalten wird.

Ich war so von der Docstring-Idee fasziniert das ich vergessen habe das
ich's mir mit einem "isinstance" Test und einer gemeinsamen Basisklasse (die
eh notwendig ist) den Aufwand hätte sparen können...

Um die Frage zu benantworten: was besseres als auf ein Verzeichnis per
Muster zuzugreifen ist mir auch nicht eingefallen :-)

Viele Grüße,
Andrew