Maison > développement back-end > Tutoriel Python > Pourquoi est-ce que j'obtiens « Tentative d'importation relative dans un non-package » en Python ?

Pourquoi est-ce que j'obtiens « Tentative d'importation relative dans un non-package » en Python ?

Mary-Kate Olsen
Libérer: 2024-12-21 13:31:09
original
846 Les gens l'ont consulté

Why Do I Get

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
Copier après la connexion

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 :

  1. Exécuter les modules en tant que packages : Utilisez python -m package.subpackage1.moduleX pour charger un module sans en l'exécutant en tant que script.
  2. Séparez l'exécution de l'importation : Exécutez des scripts en dehors du répertoire du package et importez des modules à partir d'eux pour activer les importations relatives.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal