Forum Programmation.python Plugin en python

Posté par  (site web personnel) .
Étiquettes : aucune
0
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!
  • # Un exemple

    Posté par  (site web personnel) . É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  (site web personnel) . É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.




Suivre le flux des commentaires

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