Maison > développement back-end > Tutoriel Python > Pourquoi les importations relatives échouent-elles lors de l'exécution directe de scripts Python ?

Pourquoi les importations relatives échouent-elles lors de l'exécution directe de scripts Python ?

Patricia Arquette
Libérer: 2024-12-22 12:43:11
original
575 Les gens l'ont consulté

Why Do Relative Imports Fail When Running Python Scripts Directly?

Pourquoi les importations relatives échouent dans les scripts non-package

Définition du problème :

Lors d'une tentative d'importation relative à partir d'un fichier Python exécuté en tant que script de niveau supérieur (par exemple, en tapant python myfile.py), un message d'erreur s'affiche : "Tentative d'importation relative dans un non-package. Lorsqu’il est exécuté directement en tant que script, un fichier porte le nom « __main__ ». Lorsqu'il est importé en tant que module à partir d'un autre fichier, son nom reflète la structure de son package (par exemple, "package.subpackage.module").

Restriction d'importation relative :

Relative les importations s'appuient sur le

nom complet

d'un module pour déterminer sa position dans la hiérarchie des packages. Si le nom d'un module ne contient aucune information sur le package (par exemple, "__main__"), les importations relatives échouent car le module n'est pas considéré comme faisant partie d'un package.

Explication de l'erreur :

Lorsque le

nom complet

d'un module ne contient pas de points, ce qui indique qu'il n'y a aucune association de package, Python l'interprète comme un script autonome et les importations relatives deviennent invalides. Cette erreur se produit lorsque :

Tentative d'importations relatives dans un fichier exécuté directement en tant que script sans l'option "-m".

Importation d'un fichier depuis le répertoire actuel où l'interpréteur Python est en cours d'exécution, ce qui peut conduire Python à identifier prématurément le module comme autonome.

  1. Solutions :

Exécuter le script en tant que module : Utilisez python -m package.subpackage.moduleX pour charger le script en tant que module, préservant son association de package et permettant les importations relatives.

    Séparer Script et module :
  1. Déplacez le script vers un répertoire différent en dehors du package et importez-le à partir de là, permettant aux importations relatives de fonctionner.
  2. Remarques supplémentaires :
Le répertoire du package doit être inclus dans le chemin de recherche du module Python (sys.path) pour un accès fiable à son contenu.

À partir de Python 2.6, le "nom" d'un module est influencé à la fois par les attributs name

et
    package
  • .

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