Maison > développement back-end > Tutoriel Python > Pourquoi Python renvoie-t-il une erreur « Importation relative dans un non-package » ?

Pourquoi Python renvoie-t-il une erreur « Importation relative dans un non-package » ?

Susan Sarandon
Libérer: 2024-12-23 16:31:10
original
369 Les gens l'ont consulté

Why Does Python Throw a

Importations relatives en Python : comprendre l'erreur "Non-Package"

Le problème omniprésent de "Tentative d'importation relative dans un non-package" provient d'une mauvaise compréhension de la distinction entre les scripts et les modules et de leurs comportements respectifs lors de l'importation.

Script vs Module

Lorsqu'un fichier Python est exécuté directement, il agit comme un script de niveau supérieur et reçoit le nom « __main__ ». Une fois importé, le nom du fichier devient le nom du package suivi du nom du fichier, séparé par des points.

Importations et packages relatifs

Les importations relatives utilisent le nom du module pour localiser son position dans une hiérarchie de packages. Cependant, si le nom du module ne contient pas d'informations sur le package (par exemple, "__main__"), les importations relatives sont résolues comme s'il s'agissait d'un module de niveau supérieur, quel que soit l'emplacement réel de son fichier.

Le Erreur "Non-Package"

L'erreur se produit lorsque des importations relatives sont tentées dans un module qui n'est pas reconnu comme faisant partie d'un package. Cela peut se produire lorsque le nom du module ne contient pas de points, indiquant son statut de non-package.

Solutions

Pour résoudre l'erreur, envisagez les approches suivantes :

  • Utilisation du commutateur -m :
    Pour exécuter un module en tant que module (et non un script), utilisez la syntaxe "python -m package.subpackage1.moduleX."
  • Déplacez le script :
    Créez un script séparé qui utilise le module souhaité et exécutez ce script depuis l'extérieur du répertoire du package. Cela évite d'attribuer "__main__" au nom du module et permet des importations relatives.

Remarques supplémentaires :

  • Assurez-vous que le répertoire du package est accessible dans le chemin de recherche du module (sys.path).
  • À partir de Python 2.6, le "nom" du module pour la résolution du package comprend à la fois les attributs package et name.

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