Re: loading a plugin in python
Von: Volker Grabsch (volker_grabsch@v.notjusthosting.com) [Profil]
Datum: 22.07.2009 20:51
Message-ID: <h47n47$gr0$01$1@news.t-online.com>
Newsgroup: de.comp.lang.python
Datum: 22.07.2009 20:51
Message-ID: <h47n47$gr0$01$1@news.t-online.com>
Newsgroup: de.comp.lang.python
Diez B. Roggisch <deets@nospam.web.de> schrieb: > Volker Grabsch schrieb: >> >> modulename = "plugin/dummy" >> [...] >> class Dummy: >> pass >> >> Plugin = Dummy >> [...] >> p = __import__(modulename).Plugin() > > Das geht so nicht. Doch. Getestet mit Python 2.4 und Python 2.5: $ cat test.py modulename = "plugin/dummy" p = __import__(modulename).Plugin() print p $ cat plugin/dummy.py class Plugin: def __str__(self): return "Dummy Plugin" $ python test.py Dummy Plugin > __import__ liefert immer nur das toplevel-modul. Ja, und? Du hast wahrscheinlich übersehen, dass ich im Modulnamen einen '/' und keinen '.' habe. :-) > Stattdessen muss man sowas machen: > > module = __import__(modulename) > for part in modulename.split(".")[1:]: > module = getattr(module, part) > > module.Plugin() Dein Ansatz wird nur funktionieren, wenn das Plugin- Verzeichnis ein Package ist, also eine __init__.py enthält. Mein Ansatz funktioniert hingegen auch ohne. > Alternativ ist es vielleicht fuer plugin-systeme eh besser setuptools > und die dort moeglichen "entry-points" zu benutzen. Damit kann man sich > alle moeglichen plugins aufzaehlen lassen, ohne wissen zu muessen, in > welchem Paket die stecken. Netter Ansatz! Das kannte ich noch gar nicht. Für die, die es interessiert: Es gibt eine nette Einführung unter http://aroberge.blogspot.com/2008/12/plugins-part-6-setuptools-based.html Gruß, Volker -- "Wenn du der Meinung bist, der andere sei ein Depp, dann überlass das Antworten denjenigen, die nicht dieser Meinung sind." -- Adrian Suter in <5tejveF1d94gkU2@mid.individual.net>[ Auf dieses Posting antworten ]
Antworten
- Peter Otten (22.07.2009 21:26)
- Diez B. Roggisch (23.07.2009 11:04)
