Maison >développement back-end >Tutoriel Python >Pourquoi `__import__` ne parvient-il pas à importer complètement les sous-modules en Python et comment puis-je y remédier ?

Pourquoi `__import__` ne parvient-il pas à importer complètement les sous-modules en Python et comment puis-je y remédier ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-03 03:37:09991parcourir

Why Does `__import__` Fail to Fully Import Submodules in Python, and How Can I Fix It?

Comprendre la fonction import pour le chargement des sous-modules

En Python, l'importation de modules joue un rôle crucial dans l'organisation et la réutilisation du code. Cependant, lorsque vous tentez d'importer un sous-module à partir d'une variable chaîne à l'aide de la fonction import, des résultats déroutants peuvent survenir.

Problème :

Considérez le code suivant :

import matplotlib.text as text
x = dir(text)

i = __import__('matplotlib.text')
y = dir(i)

j = __import__('matplotlib')
z = dir(j)

La comparaison des trois listes x, y et z révèle des différences inattendues. Plus précisément, la liste y manque d'informations sur les classes principales du sous-module matplotlib.text, qui est présent dans la liste x.

Solution :

L'import la fonction nécessite une compréhension approfondie. En ajoutant un argument de chaîne vide au paramètre fromlist, nous pouvons spécifier que nous voulons importer le sous-module lui-même :

i = __import__('matplotlib.text', fromlist=[''])

Maintenant, la variable i fera référence au sous-module matplotlib.text, et la liste y contiendra le informations souhaitées.

Alternativement, à partir de Python 3.1, nous pouvons utiliser le importlib package :

import importlib

i = importlib.import_module("matplotlib.text")

Remarques supplémentaires :

  • Lors de l'importation de fichiers à partir de sous-dossiers, utilisez la syntaxe suivante : importlib.import_module("feature.email ")
  • Dans les versions Python antérieures à 3.3, importation depuis des sous-dossiers sans fichier __init__.py n'était pas possible.

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