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

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

Susan Sarandon
Susan Sarandonoriginal
2024-12-08 06:58:11866parcourir

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

Importation de modules à partir de variables de chaîne avec "__import__"

Lorsque vous essayez de documenter des sous-modules spécifiques dans la bibliothèque matplotlib (MPL), cela peut être nécessaire d'importer ces sous-modules à partir de chaînes. Cependant, l'utilisation de la fonction "__import__" peut produire des résultats inattendus par rapport aux instructions d'importation standard.

Problème :

Importation d'un sous-module à l'aide de "__import__" (par exemple, __import__( 'matplotlib.text')) ne charge pas complètement le contenu du sous-module comme prévu. En comparant la liste des attributs obtenus à la fois à partir de "__import__" et d'une importation régulière, il est évident que "__import__" inclut les définitions de base de matplotlib ainsi que des éléments superflus, mais manque de classes cruciales du sous-module cible.

Solution :

Pour charger un sous-module à partir d'une chaîne à l'aide de "__import__", spécifiez une liste vide comme deuxième argument (fromlist):

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

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

Ce code révisé charge efficacement le sous-module souhaité, produisant la liste d'attributs attendue.

Alternativement, dans les versions Python 3.1 ou ultérieures, on peut utiliser l'importlib module :

import importlib

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

Remarques :

  • Pour les importations impliquant des sous-dossiers (par exemple, ./feature/email.py), utilisez importlib.import_module ("feature.email").
  • Dans les versions Python antérieures à 3.3, un __init__.py Le fichier était requis dans le dossier du fichier importé. Cependant, après la version 3.3, cette exigence a été supprimée.

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