Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.python

Programmation.python : Plugin en python

Posté par eMerzh (Jabber id, page perso, ) le 31 août 2006
Hello
voila j'essaye de trouver un moyen de charger dynamiquement différents fichiers se trouvant dans un répertoire précis.
ces fichiers représenterai des modules de mon programme.

je les ai tous fait hériter d'une classe Parent afin de définir l'interface.

mais j'arrive pas à le faire charger comme il faut.
j'ai pas mal googler, mais je m'en sort pas..
je tester avec le fichier __init__.py dans le répertoire des plugin ,

et avec la fonction __import__() mais jarrive pô...
kkun peu maider pliiize?

merci!

> Lire le message (2 commentaires, moyenne: 1).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Un exemple

Posté par Pierre Tramo (page perso, ) le 31/08/2006 à 09:47. (lien). Évalué à 1.

Je ne sais pas si ça correspond vraiment à ton besoin, mais j'ai l'impression que c'est exactement ce que fait le système de plugins de pyCoinCoin.
Regarde dans l'archive http://pycoincoin.free.fr/download/pycc-0.8.7.tar.gz le fichier pyc2.py, il y a une fonction import_plugins qui charge tous les modules disponibles dans le répertoire plugins/
C'est dynamique, c'est à dire que tu peux recharger les plugins ou en importer de nouveaux (via l'appel à cette fonction) alors même que l'appli est en train de tourner.
Comme toi, j'ai une classe d'interface Plugin parente.

Pour référence
pyCoinCoin : http://chrisix.free.fr/pycoincoin/
wiki doc développeur (en cours de contruction) : http://pycoincoin.free.fr/wikini/
en particulier les plugins : http://pycoincoin.free.fr/wikini/wakka.php?wiki=ModulePlugin

No problemo

Posté par GuieA_7 (page perso, ) le 31/08/2006 à 10:09. (lien). Évalué à 1.

Il suffit d'utiliser conjointement les modules imp et inspect. Par exemple:

###########
from imp import load_source
from inspect import getmembers, isfunction

def filterfunc(obj) :
__if isfunction(obj) :
____return obj.__name__ == 'foobar'


f = file( 'toto.py')
mod = load_source(name[:-3], f.name, f)
f.close()

my_func = getmembers(mod, filterfunc) [0][1]

##############

Ce code ouvre le plugin nommé 'toto.py', et y cherche une fonction nommée 'foobar'. Plus qu'à appeler my_func, qui pourra te renvoyer par exemple une instance d'objet dérivant de ton Parent.




Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.python