Importations relatives en Python
L'erreur courante « Tentative d'importation relative dans un non-package » survient souvent lorsque vous travaillez avec des importations relatives dans Python. Cet article vise à clarifier le concept d'importations relatives et à fournir des solutions pour résoudre cette erreur.
Différence entre les scripts et les modules
La principale distinction réside dans la façon dont les fichiers Python sont chargé. Un fichier exécuté directement à l'aide de python myfile.py est considéré comme un script de niveau supérieur. A l’inverse, un fichier importé à l’aide d’une instruction import dans un autre fichier est un module. Cette distinction devient cruciale pour comprendre les importations relatives.
Importance du nommage
Lors du chargement, chaque fichier se voit attribuer un nom stocké dans l'attribut nom . S'il est chargé en tant que script, son nom est défini sur __main__. S'il est importé en tant que module, son nom reflète à la fois le package auquel il appartient et le nom du fichier.
Par exemple, dans la structure de répertoires fournie :
package/ __init__.py subpackage1/ __init__.py moduleX.py moduleY.py subpackage2/ __init__.py moduleZ.py moduleA.py
L'importation de moduleX lui attribuera le nom package.subpackage1.moduleX, lors de l’importation de moduleA, le nom package.moduleA est obtenu. Cependant, l'exécution directe de l'un ou l'autre module définira leur nom sur __main__, supprimant les informations sur le package.
Importations relatives
Les importations relatives parcourent les hiérarchies de packages en utilisant le nom d'un module. Par exemple, from .. import foo indique un mouvement vers le haut de la hiérarchie. L'utilisation de from .. import to ascend nécessite un nom de module contenant suffisamment de points.
Modules hors package
Cependant, les modules dont le nom manque de points ne sont pas considérés comme faisant partie de un paquet. Ainsi, les importations relatives échouent avec l'erreur non-package dans ces modules.
Solutions
Pour résoudre l'erreur, envisagez les solutions suivantes :
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!