python matplotlib

python - importar el módulo de la variable de cadena



title python (3)

Estoy trabajando en una documentación (personal) para la biblioteca matplotlib anidada (MPL), que difiere de la MPL propia provista, por paquetes de submódulos interesados. Estoy escribiendo un script de Python que espero automatice la generación de documentos a partir de futuras versiones de MPL.
Seleccioné los submódulos / paquetes interesados ​​y quiero enumerar sus clases principales a partir de las cuales pydoc lista y la procesaré con pydoc

El problema es que no puedo encontrar la manera de ordenar a Python que cargue el submódulo desde la cadena. Aquí hay un ejemplo de lo que probé:

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

.

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

.

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

Y aquí hay una comparación de 3 maneras de las listas anteriores a través de pprint:

No entiendo lo que está cargado en el objeto y - es matplotlib base más algo más, pero falta la información que quería y son las clases principales del paquete matplotlib.text . Es la parte superior de color azul en la captura de pantalla (lista x )

Por favor, no sugiera Sphinx como un enfoque diferente.


Creo que importlib.import_module es lo que estás buscando. (Solo disponible para Python> = 2.7 o 3.x):

importlib.import_module(''matplotlib.text'')


La función __import__ puede ser un poco difícil de entender.

Si cambias

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

a

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

luego i referiré a matplotlib.text .

En Python 2.7 y Python 3.1 o posterior, puede usar importlib :

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

Algunas notas

  • Si intenta importar algo de una subcarpeta, por ejemplo, ./feature/email.py , el código se verá como importlib.import_module("feature.email")

  • No puede importar nada si no hay __init__.py en la carpeta con el archivo que está intentando importar


Pasé algún tiempo tratando de importar módulos de una lista, y este es el hilo que me llevó la mayor parte del camino, pero no entendí el uso de ___import____ -

así que aquí está cómo importar un módulo de una cadena, y obtener el mismo comportamiento que solo importar. Y pruebe / excepto el caso de error, también. :)

pipmodules = [''pycurl'', ''ansible'', ''bad_module_no_beer''] for module in pipmodules: try: # because we want to import using a variable, do it this way module_obj = __import__(module) # create a global object containging our module globals()[module] = module_obj except ImportError: sys.stderr.write("ERROR: missing python module: " + module + "/n") sys.exit(1)

y sí, para Python 2.7> tienes otras opciones, pero para 2.6 <, esto funciona.