Estoy trabajando en una documentación (personal) para la biblioteca matplotlib anidada (MPL), que difiere de la propia MPL proporcionada, por paquetes de submódulos interesados. Estoy escribiendo un script Python que espero automatice la generación de documentos a partir de futuras versiones de MPL.
Seleccioné submódulos / paquetes interesados y quiero enumerar sus clases principales a partir de las cuales generaré una lista y la procesaré conpydoc
El problema es que no puedo encontrar una manera de indicarle a Python que cargue el submódulo de 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 vías de las listas anteriores a través de pprint:

No entiendo lo que está cargado en el yobjeto: es base matplotlibmás algo más, pero carece de la información que quería y esas son las clases principales del matplotlib.textpaquete. Es la parte superior de color azul en la captura de pantalla ( xlista)
No sugiera a Sphinx como un enfoque diferente.
fuente

__import__(str)lugar del estado estándarimport?importdeclaración. Aquí hay un ejemplo de uso: djangosnippets.org/snippets/3048Respuestas:
La
__import__función puede ser un poco difícil de entender.Si cambias
a
entonces
ise referirá amatplotlib.text.En Python 2.7 y Python 3.1 o posterior, puede usar
importlib:Algunas notas
Si está intentando importar algo de una subcarpeta, por ejemplo
./feature/email.py, el código se verá asíimportlib.import_module("feature.email")No puede importar nada si no hay
__init__.pyen la carpeta con el archivo que está intentando importarfuente
importlibdebería estar disponible en pypi para <python2.7./feature/email.py) , el código se verá asíimportlib.import_module("feature.email")__init__.pyen la carpeta con el archivo que está intentando importar.import moduleNamedonde moduleName es una cadena. ¿Qué talfrom moduleName import *?importlib.import_modulees lo que buscas. Devuelve el módulo importado. (Solo disponible para Python> = 2.7 o 3.x):A partir de entonces, puede acceder a cualquier cosa en el módulo como
mymodule.myclass, etc.fuente
imp.load_source(..)usar elimpmódulo como se sugiere en esta respuesta stackoverflow.com/questions/67631/…import moduleNamedonde moduleName es una cadena. ¿Qué talfrom moduleName import *?pasé algún tiempo tratando de importar módulos de una lista, y este es el hilo que me llevó casi todo el camino, pero no comprendí el uso de ___import____ -
Así que aquí se explica cómo importar un módulo desde una cadena y obtener el mismo comportamiento que solo importar. Y pruebe / excepto el caso de error, también. :)
y sí, para python 2.7> tiene otras opciones, pero para 2.6 <, esto funciona.
fuente
Desarrollé estas 3 funciones útiles:
Y cada vez que quiero volver a cargar una nueva instancia solo tengo que llamar a getInstance () de esta manera:
Finalmente puedo llamar a todas las funciones dentro de la nueva instancia:
La única especificidad aquí es personalizar la lista de parámetros (param1, param2, param3) de su instancia.
fuente
Además de usar
importlibuno, también puede usar elexecmétodo para importar un módulo desde una variable de cadena.Aquí estoy mostrando un ejemplo de importación del
combinationsmétodo desde elitertoolspaquete usando elexecmétodo:Salida:
fuente