[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
>>
> 
> 
>