2010-10-27 6 views
0

Je découvre Python, et je veux créer une application plug-in, je suppose que c'est simple en utilisant python, mais ce sera sympa de créer une application de démarrage générique.quelqu'un sait-il une base simple pour une application de plugin dans python?

Pour être plus précis, il pourrait être un file.py qui lit un fichier XML ou INI pour obtenir la fiche dans le chemin du répertoire de puis charger tous les fichiers py comme plug-in

Des idées?

+1

Pouvez-vous être plus précis quant à ce que vous entendez par "application plug-in"? – Brad

Répondre

2

Puisque vous êtes débutant, je pense qu'il serait préférable de faire tout le travail vous-même si vous comprenez vraiment ce qui se passe. Ce n'est pas sorcier, et fait en fait une expérience d'apprentissage amusant IMO.

Commencez par forcer un chemin codé en dur vers les plugins. Par exemple, ~/.myapp/plugins. Dans là, supposons que chaque fichier .py est un plugin. Exiger que chaque fichier de ce répertoire implémente une interface simple telle qu'une commande connue que vous pouvez appeler pour créer une instance de ce plugin.

Par exemple, un plugin peut ressembler à:

# MyPlugin.py 
from myapp.plugin import Plugin # a base class you define 

def create(): 
    return MyPlugin() 

class MyPlugin(Plugin): 
    ... 

Avec cela, vous le charger avec quelque chose comme ceci:

import imp, os.path 
filename=os.path.split(pathname)[-1] 
modulename = os.path.splitext(filename)[0] 
try: 
    module = imp.load_source(modulename, pathname) 
    plugin = module.create() 
except ImportError, e: 
    print "Error importing plugin '%s': %s" % (filename, str(e)) 

Vous avez maintenant une instance de fonctionnement de votre classe plug-in, et un handle à la variable locale plugin.

Voir? Vous n'avez pas besoin d'un cadre de plugin pour démarrer.

Ce n'est pas la seule façon de le faire, et ce n'est probablement pas le meilleur moyen. Mais une fois que vous obtenez quelque chose comme ça fonctionne, vous pouvez définir les détails de ce qui fonctionne le mieux pour vous et votre application.