Maison >développement back-end >Tutoriel Python >Comment puis-je éviter l'erreur « Tentative d'importation relative dans un non-package » en Python ?

Comment puis-je éviter l'erreur « Tentative d'importation relative dans un non-package » en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 04:40:14628parcourir

How Can I Avoid the

Importations relatives en Python

Comprendre les importations relatives en Python est crucial pour éviter l'erreur « Tentative d'importation relative dans un non-package ».

Script vs Module

Une distinction clé découle de la méthode de chargement d'un fichier Python. Lorsqu'il est exécuté directement en tant que script, son nom est défini sur __main__. À l'inverse, s'il est importé, son nom inclut les informations sur le package.

Conventions de dénomination

Par exemple, si moduleX dans package/subpackage1/moduleX.py est importé, son nom devient package.subpackage1.moduleX. Cependant, s'il est exécuté directement, son nom est __main__.

Importations relatives

Les importations relatives s'appuient sur le nom d'un module pour déterminer sa hiérarchie de packages. Les modules dont les noms ne contiennent aucun point ne sont pas considérés comme faisant partie d'un package.

Cause de l'erreur

L'erreur se produit lorsque des importations relatives sont tentées dans des modules dont les noms indiquent qu'ils sont ne sont pas dans un paquet (c'est-à-dire que leurs noms manquent de points). Cela inclut les scripts (puisque main n'a pas de points) et les modules chargés directement à partir du répertoire actuel (où Python ajoute le répertoire actuel à son chemin de recherche).

Solutions

  • Exécuter en tant que module : Utilisez python -m package.subpackage1.moduleX pour exécuter moduleX en tant que module, permettant les importations relatives.
  • Placer ailleurs : Déplacez tous les scripts utilisant moduleX vers un emplacement en dehors du répertoire du package, permettant les importations relatives dans ces scripts .

Notes

  • Le Le répertoire du package doit être accessible dans le chemin de recherche de Python.
  • Dans Python 2.6, l'attribut package influence également la résolution du package pour les modules.

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