[Python-de] Registrierung externer Plugins

Florian Lindner mailinglists at xgm.de
Di Sep 4 16:30:24 CEST 2012


Am 4. September 2012 12:33 schrieb Diez Roggisch <deets at web.de>:
> On 9/4/12 12:20 PM, "Florian Lindner" <mailinglists at xgm.de> wrote:
>
>>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?
>
> 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.

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


Mehr Informationen über die Mailingliste python-de