Maison > développement back-end > Tutoriel Python > Comment puis-je résoudre les erreurs « Tentative d'importation relative dans un non-package » en Python ?

Comment puis-je résoudre les erreurs « Tentative d'importation relative dans un non-package » en Python ?

Barbara Streisand
Libérer: 2024-12-24 02:21:15
original
238 Les gens l'ont consulté

How Can I Solve

Importations relatives en Python : un guide complet

Le problème : importer des modules dans des sous-packages

Imaginez la structure de répertoires suivante :

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py
Copier après la connexion

Pour importer quelque chose du mod2 dans le module mod1, le code suivant a été tenté :

from ..sub2 import mod2
Copier après la connexion
Copier après la connexion

Cependant, cela entraîne l'erreur : "Tentative d'importation relative dans un non-package."

La solution : package déclaré

L'erreur se produit car en exécutant le module en tant que __main__ en passant l'argument mod1.py à l'interpréteur, Python le traite comme un module de niveau supérieur, ignorant le package informations.

Pour résoudre ce problème, les fichiers __init__.py doivent être correctement initialisés dans les répertoires sub1 et sub2. Cela signifie que ces répertoires sont effectivement des packages, et nous pouvons les importer à l'aide d'importations relatives.

Avec les fichiers __init__.py en place, le code suivant importera avec succès mod2 dans mod1 :

from ..sub2 import mod2
Copier après la connexion
Copier après la connexion

Importations relatives et PEP 366

PEP 366 propose un mécanisme de référencement des modules par rapport au principal modules. Dans Python 2.6 et les versions ultérieures, vous pouvez importer des modules relatifs au module principal en utilisant la syntaxe suivante :

from . import mod2
from .. import sub2
Copier après la connexion

Ce comportement s'aligne sur la fonctionnalité attendue pour les importations de sous-packages, garantissant un mécanisme d'importation cohérent et intuitif.

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