Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Python-de] Registrierung externer Plugins

6 views
Skip to first unread message

Florian Lindner

unread,
Sep 4, 2012, 6:20:20 AM9/4/12
to Die Deutsche Python Mailingliste
Hallo,

ich schreibe ein Programm, wo sich Module (= Python Klassen)
registrieren müssen. Die Klassen werden dann, wenn ein bestimmtes Tag
in der XML-Konfigurationsdatei angetroffen wird, aufgerufen:

from somewhere import ChangeDictionary
WorkerRegistry.register("changeDictionary", ChangeDictionary) # ist
eine @classmethod

Später gibt es eine WorkerFactory die Instanzen entsprechend zurückliefert.

Es soll anderen Benutzern ermöglicht werden neue Klassen
hinzuzugefügen und diese entsprechend zu registrieren. Ich brauche
also eine Möglichkeit die Registrierung auszuführen, wenn mein
Programm startet. Wie mache ich das am besten?

1) Ich gebe den Program einen Modulpfad mit (über Konfig-Datei,
Umgebungsvariable oder Argument) wo dieser Code liegt Es wird dann
__import__(modulepath) ausgeführt. In der __init__.py des Modules
können die entsprechenden Aufrufe zur Registrierung liegen.

2) ...?

Wie würdert ihr das regeln? Oder ganz anders?

Grüße,
Florian

Diez Roggisch

unread,
Sep 4, 2012, 6:33:03 AM9/4/12
to Florian Lindner, Die Deutsche Python Mailingliste
Ich habe immer gerne mit setuptools entry points gearbeitet, da diese
automatisch bei Installation eines entsprechenden EGGs angemeldet werden,
und in deiner Software dann bequem enumeriert werden können.

Aber das legt die Latte für Plugin-Entwickler etwas höher - die müssen das
entsprechend aufsetzen, und distribuieren. Das kann man zB mit einem
Beispielprojekt oder so ganz gut machen.

Ansonsten gibt's plugin-Frameworks und Ansätze wie Sand am Meer - nicht
verwunderlich bei einer so dynamischen Sprache.

Konkreter kann man da schlecht werden, weil du nicht wirklich viel darüber
verrätst, welchen Einsatzzweck und Umfang deine Plugins haben. Sind das
simple ein-Klassen-Dinger, oder ganze Pakete mit was weiss ich, läuft das
ganze aus dem Systempython oder in einem virtuellen Env oder oder oder.

Diez


Florian Lindner

unread,
Sep 4, 2012, 10:30:24 AM9/4/12
to Diez Roggisch, Die Deutsche Python Mailingliste
Hallo!

das Programm ist eine Ablaufsteuerung für eine numerische Simulation.
Der Benutzer soll Plugins schreiben können, die gewisse Aufgaben dabei
erledigen und der Reihe nach aufgerufen werden.

Das ganze soll eher im kleinen Rahmen laufen, Plugins werden idR nur
aus einer einzigen Klasse bestehen, setuptools, eggs und virtualenv
Geschichten würde ich gerne draussen halten. Die Distribution der
Plugin wird vermutlich eher so laufen, dass A zu B sagt: "Schick mir
doch mal den Quelltext!" und dieser wird dann irgendwo hin kopiert.
Mag nicht immer optimal sein, aber so läuft es nun mal....

Grüße,
Florian

Diez Roggisch

unread,
Sep 4, 2012, 12:12:05 PM9/4/12
to Florian Lindner, Die Deutsche Python Mailingliste
Ist ja nix gegen einzuwenden, nur fehlte diese Info halt.

Unter den gegebenen Umstaenden wuerde ich einfach mal mit dem imp-Modul
rumspielen, und mit einem Plugin-Directory arbeiten, in dem eben die
plugin-files liegen.

Noch eine Frage: warum XML? Wenn es wirklich ein Python-Programm ist, dann
macht XML die Sache üblicherweise komplizierter - denn du kannst doch die
Leute einfach die entsprechenden Objekte selbst zusammen stöpseln lassen?
Wenn die schon Python könnenŠ

XML ist in so statischen Sprachen wie Java angezeigt, aber nicht in
Python. Ist vielleicht mal ne Überlegung wert.

Diez


Thomas Waldmann

unread,
Sep 6, 2012, 11:49:57 AM9/6/12
to pyth...@python.org
Hi Florian,

weiss nicht, ob's Dir was hilft, guck selbst:

http://moinmo.in/GoogleSoc2012/PluginSystem

Sein GSOC-Projekt war ein gescheites Plugin-System zu entwickeln (fuer
moin2, koennte man wohl auch auch anderweitig verwenden).

Leider ist das Projekt noch nicht ganz so weit fortgeschritten, wie es
eigentlich sein sollte, aber er arbeitet noch dran.

Das Thema ist leider (zumindest in unserem Fall) sehr komplex, siehe
auch das dort verlinkte Etherpad mit den Ideen / der Diskussion dazu.

Wir haben den Code noch nicht in's main-repo gemerged, haengt dann vom
weiteren Verlauf / Review ab.

Wir sind im IRC auf #moin-dev. :)

mfg Thomas

0 new messages