Importations relatives en Python : une explication détaillée
Lorsque vous travaillez avec un répertoire structuré contenant plusieurs sous-packages, l'importation de modules à partir d'autres sous-packages peut être un problème. exigence commune. Cependant, l'approche standard consistant à utiliser des importations relatives, telles que from ..sub2 import mod2, peut échouer dans certains scénarios.
Ce fut le cas pour un développeur tentant d'importer mod2 depuis mod1, dans la structure de répertoires fournie. dans la question. Le message d'erreur "Tentative d'importation relative dans un non-package" indique un problème avec l'importation relative.
La racine du problème réside dans le fait que le module était exécuté en tant que __main__ en le passant comme argument à l'interprète. Selon PEP 328, les importations relatives utilisent l'attribut __name__ du module pour déterminer sa position dans la hiérarchie des packages. Lorsque le nom du module est défini sur __main__, les importations relatives sont résolues comme si le module était un module de niveau supérieur, quel que soit son emplacement réel dans le système de fichiers.
Ce comportement peut prêter à confusion lors de la tentative d'importation. modules d'autres sous-packages. Pour résoudre ce problème, il est recommandé de placer le code dans un script et d'importer explicitement les sous-packages concernés à l'aide d'importations absolues, telles que import sub2.mod2.
Dans Python 2.6 et versions ultérieures, cependant, la possibilité de référencer des modules par rapport au module principal a été introduit. PEP 366 décrit ce changement. Pour utiliser efficacement les importations relatives, il est essentiel de référencer le module principal au lieu d'utiliser __main__. Ceci peut être réalisé de différentes manières, telles que :
En adoptant ces techniques, les développeurs peuvent utiliser efficacement les importations relatives pour organiser leurs projets Python et gérer les dépendances entre les modules de manière structurée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!