Maison > développement back-end > Tutoriel Python > Pourquoi Python échoue-t-il aux importations relatives à partir d'un répertoire de packages lors de l'utilisation de « python -m » ?

Pourquoi Python échoue-t-il aux importations relatives à partir d'un répertoire de packages lors de l'utilisation de « python -m » ?

Linda Hamilton
Libérer: 2024-11-24 02:52:08
original
978 Les gens l'ont consulté

Why Does Python Fail Relative Imports from a Package Directory When Using `python -m`?

Erreur au-delà du package de niveau supérieur lors de l'importation relative

Une erreur déroutante se produit lors de la tentative d'importation relative à partir des sous-modules d'un package lorsqu'il est exécuté à partir de dans le répertoire du package. Plus précisément, l'erreur « ValueError : tentative d'importation relative au-delà du package de niveau supérieur » est rencontrée.

Cette erreur provient du comportement particulier de Python consistant à ne pas enregistrer l'emplacement à partir duquel un package a été chargé. Par conséquent, lors de l'exécution d'un module en utilisant python -m package_name.module_name, le répertoire de travail courant n'est pas considéré comme un package.

Par conséquent, une tentative d'importation relative comme from ..A import foo, qui vise à accéder à un module dans un répertoire frère, entraîne le message d'erreur. En effet, Python ne dispose pas de la référence nécessaire au répertoire frère.

En revanche, l'exécution du module à l'aide de python -m package_name.package_submodule.module_name permet une résolution réussie de l'instruction from ..A import foo import. Dans ce cas, Python conserve la connaissance du répertoire parent, ce qui permet d'accéder aux répertoires frères.

On ne sait toujours pas pourquoi Python ne considère pas le répertoire de travail actuel comme un package, malgré son utilité pratique. Cette limitation peut entraîner de la confusion et des erreurs inattendues lors de l'exécution d'importations relatives à partir du répertoire du 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