Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Nom de module contenu dans une variable...

Nom de module contenu dans une variable...

Remonter à Forum général Python
  • Nom de module contenu dans une variable...

    Envoyé par gilcn le 27 Mai 2006 à 13:43
    Bonjour,

    Je cherche à faire la manipulation suivante:

    Exemple:
    >>> monmodule="sys"
    >>> import monmodule
    Traceback (most recent call last):
    File "", line 1, in ?
    ImportError: No module named module

    Quelle est la syntaxe correcte pour effectuer cette opération ? Est-ce seulement possible de faire une telle chose ?

    Je cherche à développer un petit script que je pourrais facilement étendre avec un système de plugins. Chaque plugin serait en fait une classe. Le but étant de pouvoir ajouter un plugin en modifiant le minimum de code.

    Si ma méthode est mauvaise, connaissez-vous quelques liens qui expliquent comment faire ?

    Merci pour votre aide.
    • Re: Nom de module contenu dans une variable...

      Envoyé par gilcn le 27 Mai 2006 à 16:13
      Merci beaucoup. Je crois que ça corresponds pile-poil à ce que je recherchais :).
    • Re: Nom de module contenu dans une variable...

      Envoyé par gilcn le 28 Mai 2006 à 20:26
      J'ai effectué quelques essais et il y a quelque-chose que je ne comprends pas...

      Voici le problème que je rencontre:
      $ cat file1.py
      import imp

      fn = "file2.py"
      fd = open(fn)
      module = imp.load_module(fn, fd, fn,('','r',imp.PY_SOURCE))
      fd.close()

      module.funct('Essai...')


      $ cat file2.py
      print "Hello world!"

      def funct(str):
      print str


      $ ./file1.py
      Hello world!
      Essai...


      Jusque-là, tout va bien. Si je modifie "file2.py" comme-suit:
      $ cat file2.py
      import urllib

      print "Hello world!"

      def funct(str):
      print str


      J'obtiens alors l'erreur suivante:
      $ ./file1.py
      Traceback (most recent call last):
      File "./file1.py", line 9, in ?
      module = imp.load_module(fn, fd, fn,('','r',imp.PY_SOURCE))
      File "file2.py", line 5, in ?
      import urllib
      File "/usr/lib/python2.4/urllib.py", line 26, in ?
      import socket
      File "/usr/lib/python2.4/socket.py", line 56, in ?
      import os, sys
      File "/usr/lib/python2.4/os.py", line 133, in ?
      from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
      ImportError: No module named path


      Avez-vous une idée sur l'origine de ce problème ?
    • Re: Nom de module contenu dans une variable...

      Envoyé par bader le 27 Mai 2006 à 14:17
      Regarde du côté du module "imp" qui permet de faire ça assez simplement et de façon souple pour un système de plugins.
      Si tu cherches une solution "toute faite" il existe:
      Plugboard http://plugboard.berlios.de/about/
      La solution de facilité (que j'aime pas perso) c'est de passer par __import__ directement.
Rendu par Ploneboard