J'ai donc vu pas mal de réponses à propos du fichier __init__.py
et, pour être honnête, tout est très confus pour moi et je ne comprends pas vraiment , donc j'espère de l'aide/explication de base.Corriger la structure pour la hiérarchie __init__.py dans les paquets Python
J'ai un paquet mis en place comme suit:
top_package/
├── __init__.py
└── mid_package/
├── __init__.py
├── first_import.py
└── bottom_package/
├── __init__.py
└── second_import.py
J'ai donc quelques questions ici ...
Comment importer first_import.py
en second_import.py
? Puis, comment importer second_import.py
dans first_import.py
?
Enfin, si j'ai un script en dehors de toute cette hiérarchie, dire comme ceci:
docs/
├── scripts
| └── test_script.py
└── top_package/
Comment pourrais-je importer first_import.py
et second_import.py
dans test_script.py
?
Ma version Python est 3.4.5 (64 bits Anaconda) et je cours sous Windows, si cela fait une différence.
Donc, avec ces questions sur la façon, je vais vous donner un peu de contexte sur ce que j'ai essayé jusqu'à présent:
(1) J'initialisés chaque __init.py
avec son « niveau », comme celui-ci dans le "top" __init__.py
:
import sys
sys.path.append("C:\Path\To\top_package")
(2) I ajouté une ligne avec __all__
et un tableau de tout sur ce niveau, par exemple:
__all__ = ['mid_package']
(3) Ensuite, j'ajouté les importations relatives telles que:
from .mid_package import first_import
Ou:
from .. import first_import
(4) Ensuite, je voudrais essayer de les charger normalement dans des fichiers comme celui-ci dans second_import.py
:
import first_import
(5) Ensuite, test_script.py
, je tente de charger comme:
import sys
sys.path.append('../top_package/')
import first_import
Ce qui donnerait ImportError: No module named 'first_import'
.
Je suis partant pour toutes les idées, je travaille sur ce sujet depuis quelques heures maintenant et je n'arrive pas à le trouver. Merci beaucoup!
utiliser l'importation absolue. 'from top_package.mid_package importer first_import' et' from top_package.mid_package.bottom_package importer second_import' – Sraw
@Sraw Dans les fichiers '__init __ .py' ou dans des fichiers externes? – user3684314
@Sraw faisant cela avec les fichiers externes ne fonctionne pas, indépendamment du fait qu'il soit mis avec ou sans 'sys.path.append ('../ top_package /')' (s'il n'y a pas de modifications à l'actuel '__init__. py' fichiers comme indiqué ci-dessus – user3684314