Question

Je commence avec python et ont des problèmes à comprendre le chemin recherche de chargement du module intra-paquet. J'ai une structure comme ceci:

top/                        Top-level package
    __init__.py             Initialize the top package
    src/                    Subpackage for source files
      __init__.py
      pkg1/           Source subpackage 1
         __init__.py          
         mod1_1.py
         mod1_2.py
        ...
      pkg2/           Source subpackage 2
         __init__.py
         mod2_1.py
         mod2_2.py          
         ...
       ...
    test/                  Subpackage for unit testing
      __init__.py
      pkg1Test/      Tests for subpackage1
         __init__.py
         testSuite1_1.py
         testSuite1_2.py
         ...
      pkg2Test/      Tests for subpackage2
        __init__.py
        testSuite2_1.py
        testSuite2_2.py
        ...
    ... 

Dans testSuite1_1 je besoin de module d'importation mod1_1.py (et ainsi de suite). Qu'est-ce que la déclaration d'importation dois-je utiliser? tutoriel officiel de Python (à docs.python.org, sec 6.4.2) dit:

« Si le module importé ne se trouve pas dans le paquetage courant (le paquet dont le module en cours est un sous-module), l'apparence de déclaration d'importation pour un module de niveau supérieur avec le nom donné. »

Je pris cela signifie que je pourrais utiliser (à partir de testSuite1_1.py):

d'importation src.pkg1 mod1_1

ou

src.pkg1.mod1_1 import

ni travaux. J'ai lu plusieurs réponses à des questions similaires ici, mais n'a pas pu trouver une solution.

Edit: Je change le nom du module pour suivre les conventions de nommage de Python. Mais je ne peux toujours pas cet exemple simple au travail.

Était-ce utile?

La solution 2

Problème résolu avec l'aide de http://legacy.python.org/doc /essays/packages.html (appelé dans une question similaire). Le point clé de contact (perhpas évident pour les développeurs de Python plus expérimentés) est la suivante:

"Pour un programme Python d'utiliser un paquet, le paquet doit être trouvable par la déclaration d'importation. Autrement dit, le paquet doit être un sous-répertoire d'un répertoire qui est sys.path. [...] la meilleure façon de veiller à ce qu'un paquet était sur sys.path était soit l'installer dans la bibliothèque standard ou d'avoir aux utilisateurs d'étendre sys.path en réglant leur variable d'environnement shell $ PYTHONPATH "

Ajout du chemin vers « top » à PYTHONPATH a résolu le problem.To faire la solution portable (ce qui est un projet personnel, mais je dois le partager sur plusieurs machines), je suppose avoir un code d'initialisation minimale en haut / configuration .py devrait fonctionner.

Autres conseils

Le nom du module ne comprend pas l'extension de .py. En outre, dans votre exemple, le module de niveau supérieur est en fait le nom top. Et enfin, les traits d'union ne sont pas légales pour les noms en python, je vous suggère de les remplacer par des underscores. Ensuite, essayez:

from top.src.pkg1 import mod1_1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top