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
Libérer: 2024-12-24 21:41:14
original
516 Les gens l'ont consulté

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!

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