Maison > développement back-end > Tutoriel Python > Comment puis-je effectuer avec succès des importations relatives dans des packages Python ?

Comment puis-je effectuer avec succès des importations relatives dans des packages Python ?

Patricia Arquette
Libérer: 2024-12-16 18:00:33
original
778 Les gens l'ont consulté

How Can I Successfully Perform Relative Imports in Python Packages?

Importations relatives en Python

En Python, importer des modules à partir d'un package peut être une tâche délicate. Considérez la structure de répertoires suivante :

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

Supposons que vous travaillez sur mod1.py et que vous deviez importer quelque chose depuis mod2.py. Vous pouvez essayer :

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

Cependant, cela entraîne une erreur "Tentative d'importation relative dans un non-package". La solution réside dans le fait que Python interprète les modules exécutés en tant que __main__ (par exemple, python mod1.py) comme des modules de niveau supérieur, quel que soit leur emplacement dans le système de fichiers.

Pour activer les importations relatives, le module d'importation ne doit pas être exécuté en tant que __main__. Cela peut être accompli en exécutant l'interpréteur avec un package comme module principal :

python -m app.sub1.mod1
Copier après la connexion

Vous pouvez également utiliser l'attribut __package__ pour spécifier manuellement le package parent :

import sys
sys.path.insert(0, '..')
from sub2.mod2 import MyClass
Copier après la connexion

Ceci La méthode manipule le chemin système, mais elle ne nécessite pas d'exécuter le module en tant que __main__.

Cependant, pour que les importations relatives fonctionnent dans les sous-packages, il est important de s'assurer que les fichiers __init__.py sont présents dans chaque répertoire. Ces fichiers agissent comme des marqueurs de package et permettent à l'attribut __package__ de référencer le package contenant.

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