Importations relatives : une plongée plus approfondie
Dans le monde de la programmation Python, les importations relatives sont une source courante de confusion. Cet article explore les subtilités des importations relatives, en abordant le message d'erreur omniprésent « Tentative d'importation relative dans un non-package ».
La distinction entre script et module
Comprendre la différence fondamentale entre un script et un module est cruciale. Lorsque vous exécutez directement un fichier Python, il devient un script et reçoit le nom __main__. En revanche, lorsqu'un fichier est importé, il devient un module avec un nom qui inclut sa position dans la hiérarchie des packages.
Nom du module
Le nom attribué à un module dépend s'il a été importé depuis un package ou directement depuis son répertoire. Si un module est importé à partir d'un package, son nom suit le chemin du package séparé par des points et de son sous-package contenant (par exemple, package.subpackage1.moduleA). Cependant, si un module est importé directement depuis son répertoire, son nom sera uniquement le nom du module (par exemple, moduleA).
Importations et packages relatifs
Importations relatives s'appuyer sur le nom d'un module pour déterminer sa position dans la hiérarchie des packages. Si le nom d'un module ne contient aucun point, il n'est pas considéré comme faisant partie d'un package. Cela signifie que les importations relatives tentant de traverser en dehors du répertoire actuel du module échoueront avec l'erreur « importation relative dans un non-package ».
Résoudre l'erreur
À résolvez cette erreur, envisagez les solutions suivantes :
Gardez à l'esprit que le répertoire du package doit être inclus dans le fichier Python. chemin de recherche du module (sys.path) pour que ces solutions fonctionnent. De plus, à partir de Python 2.6, les modules ont à la fois les attributs name et package qui influencent leur nom effectif.
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!