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
Libérer: 2024-12-08 06:58:11
original
888 Les gens l'ont consulté

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

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

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