Habe aus der Not heraus ein kleines Plugin System geschrieben, aber dann am Ende festgestellt, dass ich es eigenlich gar nicht benötige. Also wer so etwas nutzen zu müssen, der sollte nochmal ganz genau darüber nachdenken, ob dies wirklich so ist. Ich erstelle am ende meiner Entwicklungen mit py2exe immer ein Setup. Wer sich dann mal damit auseinander setzt, wird feststellen, das die *.pyo Dateien gezippt in einer Datei hinterlegt sind. Man bräuchte eigentlich nur die entsprechende *.pyo Datei neu erzeugen und dann auf das Zielsystem kopieren. So und jetzt für alle, die immer noch so was haben wollen der Sourcecode.
Dieser Sourcecode kommt in die Anwendung. Er liest alle konforme Dateien aus einem Ordner ein.
Code: Alles auswählen
import os, os.path, sys, string, imp, traceback
ini_plugin_format = '_plug.py'
class Plugin:
pluginlist = []
def __init__(self):
sys.path.append(os.path.abspath('./plugins'))
self._importPlugins()
def _importPlugins(self):
path = os.path.abspath('./plugins')
for f in os.listdir(path):
self.pluginlist.append(__import__(f.split('.')[0],globals(),locals(),[]))
#~ print " ".join(globals().keys())
#~ print self.pluginlist
def _getPlugins(self):
for modul in self.pluginlist:
instance = modul.Test_plug()
print instance.Function()
print instance.pluginProp ['name']
if __name__ == '__main__':
plg = Plugin()
plg._getPlugins()
Und dieser Code kommt in die Plugindatei.
Code: Alles auswählen
class Test_plug:# Muss wie die Datei heissen und die Datei muss auf
def __init__(self):
pluginProp = {}
pluginProp ['name'] = "Beispiel Plugin"
pluginProp ['version'] = "0.1"
pluginProp ['format'] = "*.txt"
pluginProp ['description'] = """laber rababer"""
pluginProp ['author'] = "Author"
pluginProp ['author_email'] = "nn@nn.de"
self.pluginProp = pluginProp
def Function(self):
return 'Dies ist eine Testeingabe'
if __name__ == '__main__':
plg = Test_plug()
print plg.pluginProp ['name']
Greetz from 2bock
