IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

__import__ vs import


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Par défaut __import__ vs import
    Hello à toutes et tous,

    Un appel à __Import__( <nom du module>, global(), local(), [] ) et censé être indentique à import <nom du module> d'après le "mode d'emploi" trouvé sur http://quentel.pierre.free.fr/python...-in-funcs.html et bien d'autres sites d'ailleurs

    En remplaçant global/local() par globals/locals() c'est déjà mieux, mais cela ne fonctionne toujours pas!


    Exemple de code qui devrait fonctionner et qui ne fonctionne pas:

    1er module, nommé "foo.py"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
     
    #import foo2
    __import__( 'foo2', globals(), locals(), [] )
    print foo2.Essai()
    2ème module nommé "foo2.py"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
     
    def Essai():
      return '***Essai***'
     
    print 'Foo2.py chargé'
    Alors, avec "import foo2" cela fonctionne, mais avec "__import__(..." cela ne fonctionne pas, alors que c'est censé être la même chose

    En remplaçant la ligne __import__( ... par __import__( 'foo2' ) cela ne change rien, aucune erreur à l'exécution, sauf bien sûr sur la ligne "print foo2.Essai() "

    J'ai bien sûr le besoin de pouvoir charger des modules dynamiquements!

    Ou est mon erreur?
    Des solutions?



    Merci à tous

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 69
    Par défaut solution de simplicité
    bonsoir,
    pourquoi ne pas faire un simple

    c'est peu pas ce qu'il y a de plus élégant mais ça n'est pas compliqué

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    __import__ retourne le module en tant qu'objet, il te faut donc écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
     
    #import foo2
    foo2 = __import__( 'foo2', globals(), locals(), [] )
    print foo2.Essai()

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    D'après http://docs.python.org/lib/built-in-funcs.html ce n'est pas la même chose... Voir l'exemple fourni avec l'espace de nom local n'est pas mis à jour.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 69

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Par défaut
    Citation Envoyé par oiffrig
    __import__ retourne le module en tant qu'objet, il te faut donc écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
     
    #import foo2
    foo2 = __import__( 'foo2', globals(), locals(), [] )
    print foo2.Essai()
    Super, c'est exactement cela que je cherché!!

    Merci, le problème est donc résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Important à lire par tous SVP
    Par Community Management dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2010, 22h54
  2. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56
  3. [DEV-C++]#import de fichier .tlb
    Par pdl dans le forum Dev-C++
    Réponses: 6
    Dernier message: 19/07/2002, 22h46
  4. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  5. IMPORTANT! A lire avant tout chose
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 01/05/2002, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo