Maison >développement back-end >Tutoriel Python >Pourquoi Python génère-t-il une erreur « Importation relative dans un non-package » et comment puis-je la corriger ?

Pourquoi Python génère-t-il une erreur « Importation relative dans un non-package » et comment puis-je la corriger ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-24 21:41:14521parcourir

Why Does Python Throw a

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 :

  1. Utilisez l'option -m : Préfixez la commande utilisé pour exécuter le script avec -m, ce qui indique qu'il doit être traité comme un module et non comme un script. Exemple : python -m package.subpackage1.moduleX
  2. Déplacez le script hors du répertoire du package : Créez un répertoire séparé pour exécuter le script et importez les modules du package dans ce script. Cela garantit que le script est chargé en tant que script avec le nom main, permettant aux importations relatives de fonctionner correctement.

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!

Déclaration:
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