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
Libérer: 2024-12-25 00:16:10
original
427 Les gens l'ont consulté

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
Copier après la connexion

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()
Copier après la connexion

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

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