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 :

problème d'import de fichier python


Sujet :

Python

  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut problème d'import de fichier python
    Bonjour,
    Je suis en linux et python 2.7.
    Lorsque je fais l'import d'un fichier python en tête de fichier j'ai une erreur : "ImportError: cannot import name DataBase__" qui n'a, semble t'il rien à voir, avec l'import en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from DataInterface.context import Context__
    from Business.domaindesc import GetPanelNames
     
    class DataBase__:
    	def __init__(self):
    		self.l_panel_names = GetPanelNames()
    ...
    Par contre si je déplace cet import dans la procédure __init__du même fichier, je n'ai pas d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from DataInterface.context import Context__
     
    class DataBase__:
    	def __init__(self):
                    from Business.domaindesc import GetPanelNames
    		self.l_panel_names = GetPanelNames()
    ...
    Y a t'il une explication ?
    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 688
    Par défaut
    Salut,
    Citation Envoyé par awalter1 Voir le message
    Y a t'il une explication ?
    Ca peut arriver si Business.domaindesc effectue un import du module courant, i.e. on se retrouve avec un import circulaire. En déplaçant, l'import dans __init__, vous supprimez l'import circulaire.

    Etes vous dans ce cas là?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Ah oui, c'est fort possible. C'est pas forcément facile à détecter. Y a t'il une astuce pour l'éviter ? En C on ajoute des directives de précompilation qui évite d'importer un fichier déjà importé.
    Merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 688
    Par défaut
    Salut,
    Citation Envoyé par awalter1 Voir le message
    Ah oui, c'est fort possible. C'est pas forcément facile à détecter.
    Le message d'erreur est pourtant explicite lorsqu'on s'est déjà pris les pieds dedans.

    Y a t'il une astuce pour l'éviter ? En C on ajoute des directives de précompilation qui évite d'importer un fichier déjà importé.
    Eviter les imports circulaires!
    Je reconnais que c'est plus facile à dire qu'à faire mais:
    1. Faites faire le boulot par l'appelant.
    Dans votre code, çà donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class DataBase__:
    	def __init__(self, panels_names):
    		self.l_panel_names = panels_names
    En fait, contrairement à C, pas besoin de savoir quel objet sera "panels_names", vous avez juste besoin de coder les bons noms des attributs/méthodes qui seront appelés. C'est l’interpréteur qui se chargera de...

    2. Préférez "import Business.domaindesc" à "from Business.domaindesc import GetPanelNames"
    Dans votre code, çà donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import Business.domaindesc as xx
    class DataBase__:
    	def __init__(self):
    		self.l_panel_names = xx.GetPanelNames()
    tant que xx.qqc n'est pas dans le corps du script (ici dans le corps d'une fonction) pas besoin d'accéder à l'objet récupéré.

    3. Déplacer le "from Business.domaindesc import GetPanelNames" à la fin du script.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Merci de ces infos que je vais tenter de mettre en pratique.

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

Discussions similaires

  1. (SQL Server Express 2008) Problème d'import de fichier texte
    Par Lioban dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/10/2009, 15h53
  2. Problème d'import de fichier texte: troncature!
    Par ted the Ors dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/06/2009, 14h58
  3. Problème d'import de fichier texte distant
    Par ouss dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2007, 20h24
  4. Problème d'importation depuis fichier xls.
    Par penchu dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/05/2007, 11h42
  5. Problème d'importation de fichier excel
    Par couanp dans le forum MATLAB
    Réponses: 7
    Dernier message: 30/04/2007, 11h49

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