Maison >développement back-end >Tutoriel Python >Comment implémenter de manière fiable des importations relatives en Python ?

Comment implémenter de manière fiable des importations relatives en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-25 00:16:10398parcourir

How to Reliably Implement Relative Imports in Python?

Implémentation des importations relatives en Python

Lorsque vous travaillez avec une structure de répertoires hiérarchique en Python, il devient nécessaire d'importer des modules à partir d'autres sous-répertoires. Les importations relatives traditionnelles utilisant « .. » peuvent conduire à des erreurs dans certains scénarios. En particulier, lors de l'exécution d'un module en tant que module principal en le passant comme argument à l'interpréteur, les importations relatives échouent.

Selon PEP 328, les importations relatives reposent sur l'attribut name d'un module pour déterminer sa position dans la hiérarchie des packages. Cependant, lorsque le nom est défini sur '__main__', comme c'est le cas lors de l'exécution d'un module en tant que module principal, les importations relatives sont résolues comme si le module était un module de niveau supérieur, quel que soit son fichier. emplacement du système.

Pour résoudre ce problème, Python 2.6 a introduit la possibilité de référencer des modules par rapport au module principal. Ceci est décrit dans la PEP 366. En tirant parti de cette fonctionnalité, il est possible d'effectuer des importations relatives sans rencontrer l'erreur « Tentative d'importation relative dans un non-package ».

Exemple :

Dans une structure de répertoires comme :

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py

Pour importer le mod2 depuis le mod1, vous pouvez utiliser ce qui suit syntaxe :

from importlib.machinery import SourceFileLoader

mod2 = SourceFileLoader('mod2', 'sub2/mod2.py').load_module()

Alternativement, si vous n'exécutez pas le module en tant que module principal, la syntaxe d'importation relative habituelle fonctionnera :

from ..sub2 import mod2

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