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
Linda Hamiltonoriginal
2024-11-26 04:48:14552parcourir

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

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

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