Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestion des imports

    22 décembre 2016 à 0:55:29

    Hello!

    J'ai un projet du genre :

    projet/
          --module_a/
                    --a.py
          --module_b/
                    --b.py
          --main.py

    (Et j'ai des __init__.py dans tout mes dossiers)

    Depuis main.py, si je fais ces imports :

    import module_a, module_b

    Tout roule, maintenant si depuis module_b/b.py je fais un

    import module_a

    ou bien encore
    from module_a.a import foo

    Je me mange des ImportError.

    J'ai l'habitude de bosser avec Django ou pyramid qui doit gerer ca avec une variable root, mais la from scratch je rame un peu.

    Alors est-ce qu'il y a un moyen de gerer ca efficacement, et sans toucher au python path, parce que je veux que mon programme soit independant de ma machine. J'ai regarde du cote des relatives imports mais ca donne rien non plus.

    Merci a vous ;)

    PS :

    import sys, os
    sys.path.append(os.path.dirname(os.path.realpath(__file__)) + '/..')
    import moda

    C'est une des solutions qui marche mais c'est hyper lourd si je dois faire dans chaque fichier ou je veux faire des imports, et c'est encore plus lourd si je dois importer plusieurs modules depuis differents path... Y'a pas une methode plus propre ?

    Peut etre en ajoutant la root de mon projet au python path pour la session courante


    -
    Edité par a.mark 22 décembre 2016 à 2:02:58

    • Partager sur Facebook
    • Partager sur Twitter
    Technical Business Analyst - New York - github
      22 décembre 2016 à 10:12:02

      Bonjour,

      Tu es sûr de ne pas avoir d'imports circulaires ?

      Avec quelle version de Python travailles-tu ?

      • Partager sur Facebook
      • Partager sur Twitter
        23 décembre 2016 à 21:11:03

        Hello.

        Je travaille en 3.5.2, et non pas d'imports circulaire a premiere vue.

        -
        Edité par a.mark 23 décembre 2016 à 21:11:41

        • Partager sur Facebook
        • Partager sur Twitter
        Technical Business Analyst - New York - github
          23 décembre 2016 à 23:06:43

          Sans connaître le message d'erreur ni le contenu des fichiers (en particulier les fichiers __init__.py), il sera difficile de se faire une idée plus précise.

          A priori c'est quelque chose qui devrait fonctionner, et sans avoir à trafiquer sys.path.

          $ tree                    
          .
          ├── main.py
          ├── module_a
          │   └── a.py
          └── module_b
              └── b.py
          
          2 directories, 3 files
          $ cat main.py             
          from module_a.a import foo
          
          foo()
          $ cat module_a/a.py       
          from module_b.b import foo
          $ cat module_b/b.py       
          def foo():
              print('foo')
          $ python main.py          
          foo
          

          -
          Edité par entwanne 23 décembre 2016 à 23:10:13

          • Partager sur Facebook
          • Partager sur Twitter

          Gestion des imports

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown