Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'import avec mon propre module

Comment remplir les inits

    22 mai 2022 à 17:53:04

    Bonjour, 

    j'ai un répertoire de fichier sous cette forme :

    +---hab_cli
    |   |   sync.py
    |   |   __init__.py
    |   |
    |   \---manager
    |       api_manager.py
    |       db_manager.py
    |       __init__.py
    main.py

    j'aimerai comprendre pourquoi je n'arrive pas a importer mon module depuis main.py

    Sync a besoin de api_manager et de db_manager pour fonctionner : 

    # contenu de sync
    from manager.api_manager import habitica_api_manager
    from manager.db_manager import habitica_db_manager
    

    quand je lance sync seule il peut importer les modules.

    Par contre si le lance main.py avec ce code ci : 

    # main.py
    from hab_cli import sync.py

    j'obtient l'erreur suivante : 


     File "d:\Barth\Prog\Habitica_cli\main.py", line 1, in <module>
        from habitica_cli import habitica_sync
      File "d:\Barth\Prog\Habitica_cli\habitica_cli\__init__.py", line 1, in <module>
        from habitica_cli.sync_manager import habitica_sync
      File "d:\Barth\Prog\Habitica_cli\habitica_cli\sync_manager.py", line 1, in <module>
        from manager.api_manager import habitica_api_manager
    ModuleNotFoundError: No module named 'manager'

    quelqu'un peux m'expliquer ?




    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2022 à 18:00:33

      Bonjour

      from hab_cli import sync



      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2022 à 18:24:48

        Phil_1857 a écrit:

        Bonjour

        from hab_cli import sync

        c'est une erreur de frappe, mais merci

        Je peux rajouter que si j'ecrit 

        # contenu de sync
        from hab_cli.manager.api_manager import habitica_api_manager
        from hab_cli.manager.db_manager import habitica_db_manager
        
        

        le programme main.py marche mais pas sync

        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2022 à 18:35:29

          Il va falloir mettre un . devant manager afin de signaler que tu importes directement depuis l'intérieur de ton package hab_cli sinon Python cherchera un module qui s'appelle manager qu'il ne trouvera donc pas

          from .manager.api_manager import habitica_api_manager
          from .manager.db_manager import habitica_db_manager



          -
          Edité par Nephthys 22 mai 2022 à 18:36:46

          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2022 à 18:55:13

            Nephthys a écrit:

            Il va falloir mettre un . devant manager afin de signaler que tu importes directement depuis l'intérieur de ton package hab_cli sinon Python cherchera un module qui s'appelle manager qu'il ne trouvera donc pas

            from .manager.api_manager import habitica_api_manager
            from .manager.db_manager import habitica_db_manager

            -
            Edité par Nephthys il y a 12 minutes

            si je fait sa je peux lancer sync depuis main.py mais plus depuis sync : 

                from .manager.api_manager import habitica_api_manager
            ImportError: attempted relative import with no known parent package

            -
            Edité par GuaranConquerant 22 mai 2022 à 20:42:55

            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2022 à 19:49:55

              Lors d'un import manager, Python va chercher dans le répertoire du script principal un fichier manager.py ou un répertoire/package manager.

              C'est ce qui fait que ça marche avec sync.py en tant que script principal mais plus lorsque sync.py est importé par main.py (qui est un répertoire au dessus).

              => si on veut lancer sync.py comme script principal ou comme module, le plus simple sera d'avoir des import conditionnés à __name__ == '__main__'.

              • Partager sur Facebook
              • Partager sur Twitter

              Problème d'import avec mon propre module

              × 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