[Python-de] Dynamisch Module Nachladen wenn die Namen erst zur Laufzeit bekannt sind?
Gerald Klix
Gerald.Klix at klix.ch
Do Nov 15 16:33:24 UTC 2007
Hi Bastian,
versuchs mal mit sowas wie:
def loadPlugin( name ):
return getattr( __import__( name ), name )
Mit ein wenig error handling sollte es das schon tun.
Bis denne,
Gerald
Bastian Venthur schrieb:
> Super, das geht ja sogar noch viel schneller. Danke!
>
> Gibts jetzt noch was äquivalentes um die gleichnamige Klasse aus dem
> Modul zu bekommen?
>
> Angenommen, jedes Modul enthält eine Gleichnamige Klasse (die wie gesagt
> alle von der gleichen Klasse abstammen).
>
> Jetzt hab ich das Modul Foo dynamisch geladen, aber wie bekomme ich
> dynamisch ein Objekt Foo.Foo ohne exec zu bemühen?
>
>
> Schöne Grüße,
>
> Bastian
>
> On 15.11.2007 15:20 schrieb Gerald Klix:
>
>>Hi,
>>das geht ganz einfach, indem man die eingebaute Funktion __import__ verwendet.
>>Es ist sogar so, daß import seinerseits wiederum auf __import__ basiert.
>>
>>Siehe: http://docs.python.org/lib/built-in-funcs.html
>>
>>
>>HTH,
>>Gerald
>>
>>Bastian Venthur schrieb:
>>
>>>Hi Liste,
>>>
>>>
>>>Was ist der eleganteste Weg um dynamisch Module aus einem Paket
>>>nachzuladen wenn die Modulnamen erst zur Laufzeit feststehen?
>>>
>>>Als uneleganteste Lösung könnte man bei Programmstart alle Module eines
>>>Paketes laden (wobei zur Zeit der Programmierung die Namen noch nicht
>>>feststehen), also sowas wie
>>>
>>> import paket.* oder
>>> from paket import *
>>>
>>>was ja leider nicht geht.
>>>
>>>Besser wäre wenn bei Nutzereingabe der string genommen wird und sowas wie
>>>
>>> from paket import eingabe
>>>
>>>das könnte man mit exec sicher noch irgendwie machen, aber kennt jemand
>>>ne elegantere Lösung?
>>>
>>>Hintergrund ist eine Nutzanwendung in dem in einem Paket nur Module sind
>>>die eine Klasse enthalten die alle von der selben Klasse abgeleitet
>>>sind. Je nach Nutzereingabe soll die jeweilige Klasse geladen werden.
>>>Sowas wie ein Plugin-System eben. Schön wäre es auch wenn man bei neuer
>>>Eingabe das alte Modul wieder entladen könnte...
>>>
>>>
>>>Schöne Grüße,
>>>
>>>Bastian
>>>
>>
>>
>>_______________________________________________
>>python-de maillist - python-de at python.net
>>http://python.net/mailman/listinfo/python-de
>>
>
>
>