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 :

Probleme d'Import dans un environnement multi 'projets'.


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut Probleme d'Import dans un environnement multi 'projets'.
    J'ai un problème un peu tordu au sein de mon projet. Cela concerne l'axiome qui dit que de multiple commandes 'import' ne déclenche qu'une seule et unique exécution fichier. En fait, il y a un cas ou cela n'est pas vrai et forcément, je suis dedans. cf ICI pour une explication détaillée.

    J'ai fais une première appli (Main.py) qui marche et a un certain nombre de modules et packages inclus. Cette petite appli est incluses dans un projet plus gros (MainGlobal.py). Voila comment c'est architecturé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MainGlobal.py
    + src
      + Main.py
      + Pkg1
        + __init__.py
        + ...
      + Pkg2
        + __init__.py
        + ...
      + ...
    ...
    Mon problème c'est que l'application 'Main.py' lancée seule marche très bien, mais quand j'import le module 'Main' dans 'MainGlobal.py' je me retrouve dans le cas ou certain de mes fichier inclues dans les packages sont importés plusieurs fois.
    Entendez par la que le contenu du fichier est exécuté plusieurs fois, exactement comme s'il y avait des reload() a la place des import. Et cela génère des incohérences dans mes structures de donnée qui ne sont pas faites pour des initialisations multiples.

    Voici une solution qui marche mais est globalement assez moche (et la je suis gentil )
    -Dans le sys.path, remplacer le répertoire courant (ou est situé le MainGlobal.py) par le répertoire 'src' avant les inclusions.

    Cela tient vraiment du patch de fortune. Sauriez-vous comment faire ca "propre" ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Peut-être ceci pourrait t'aider: http://www.amitu.com/blog/2007/july/...ha-and-advice/ ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Oui, je connais ce topic, c'est en le lisant que j'ai compris d'où venait mon problème.
    Avant cela, j'étais persuadé qu'il n'était pas possible qu'une inclusion exécute un fichier plusieurs fois - ce qui est très largement dit dans toutes les références 'officielles' que j'ai pu lire.

    Mais il ne donne pas vraiment de solution, juste une explication du comportement.

    Merci pour ton aide en tout cas. Je vais essayer de m'orienter vers les modules et fonctions d'exécution de sous-script plutôt que sur un 'import' dans mon script principal. Je devrais pouvoir contourner le problème comme ca.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Il y a peut-être moyen de standardiser les imports. Peut-être n'utiliser que des imports absolus (from __future__ import absolute_import) ? Regarde ici: http://www.python.org/dev/peps/pep-0328/
    Si j'ai bien compris, de cette façon un import se fait toujours par rapport au sys.path et pas par rapport au module courant.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Ah oui, je n'avais pas vu qu'on pouvais faire des imports relatifs avec des sous-répertoires.

    Je devrais pouvoir m'en sortir avec cette méthode. Je vais tester de suite.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Okay, les imports relatifs ca marche. Merci pour le coup de pouce.


    Mais bon, ca fait moche dans le projet d'avoir 3 ou 4:
    Code moche : Sélectionner tout - Visualiser dans une fenêtre à part
    from .. import package1

    Et j'ai pas trop envie de faire 4 niveaux de répertoire dans mon projet
    Je vais faire un peu de re-architecture, histoire de.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/01/2010, 14h28
  2. petit probleme de pointeur dans strcat sur le projet de mes etudiant
    Par hamhama-group dans le forum Bibliothèque standard
    Réponses: 8
    Dernier message: 04/12/2007, 18h34
  3. probleme d importation dans encore dvd 2
    Par Koryo dans le forum Vidéo
    Réponses: 2
    Dernier message: 11/09/2007, 17h39
  4. Réponses: 1
    Dernier message: 22/04/2007, 18h08
  5. probleme d import dans une base de données
    Par calimero642 dans le forum SGBD
    Réponses: 12
    Dernier message: 05/07/2006, 14h19

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