Maison > développement back-end > Tutoriel Python > Pourquoi est-ce que j'obtiens une erreur « ValueError : tentative d'importation relative au-delà du package de niveau supérieur » en Python ?

Pourquoi est-ce que j'obtiens une erreur « ValueError : tentative d'importation relative au-delà du package de niveau supérieur » en Python ?

Linda Hamilton
Libérer: 2024-11-26 04:48:14
original
611 Les gens l'ont consulté

Why Am I Getting a

Erreur d'importation relative : au-delà du package de niveau supérieur

Dans Python 3, les importations relatives offrent un moyen pratique de faire référence à des modules au sein du même répertoire ou package. Cependant, rencontrer une erreur « ValueError : tentative d'importation relative au-delà du package de niveau supérieur » peut être déroutant.

Considérez la structure de package suivante :

package/
    __init__.py
    A/
        __init__.py
        foo.py
    test_A/
        __init__.py
        test.py
Copier après la connexion

Lorsque vous tentez d'importer un module à partir d'un sous-package (par exemple, from ..A import foo dans test.py), vous pouvez rencontrer l'erreur susmentionnée si les conditions suivantes sont rencontré :

  1. Vous exécutez le module (par exemple, python -m test_A.test) à partir du répertoire du package (package/), et
  2. Vous n'utilisez pas de commande qui spécifie le package comme package de niveau supérieur (par exemple, python -m package.test_A.test).

La raison de cette erreur provient d'un aspect fondamental du mécanisme d'importation de Python. Lorsqu'un package est chargé, il est considéré comme un « package de niveau supérieur » et les importations relatives ne peuvent référencer que les modules de ce package ou de ses sous-packages. Cependant, Python ne reconnaît pas automatiquement le répertoire parent du package en tant que package lors de l'exécution directe d'un module.

Par conséquent, dans le scénario ci-dessus, lorsque vous exécutez python -m test_A.test à partir du répertoire du package, le parent ('package/') n'est pas considéré comme un package, et l'importation relative depuis ..A import foo tente effectivement d'aller au-delà du package de niveau supérieur.

Pour résoudre cette erreur, assurez-vous d'avoir spécifiez le chemin complet du package lors de l'exécution du module :

python -m package.test_A.test
Copier après la connexion

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 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