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 y
objeto: es base matplotlib
más algo más, pero carece de la información que quería y esas son las clases principales del matplotlib.text
paquete. Es la parte superior de color azul en la captura de pantalla ( x
lista)
No sugiera a Sphinx como un enfoque diferente.
fuente
__import__(str)
lugar del estado estándarimport
?import
declaració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
i
se 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__.py
en la carpeta con el archivo que está intentando importarfuente
importlib
debería estar disponible en pypi para <python2.7./feature/email.py
) , el código se verá asíimportlib.import_module("feature.email")
__init__.py
en la carpeta con el archivo que está intentando importar.import moduleName
donde moduleName es una cadena. ¿Qué talfrom moduleName import *
?importlib.import_module
es 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 elimp
módulo como se sugiere en esta respuesta stackoverflow.com/questions/67631/…import moduleName
donde 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
importlib
uno, también puede usar elexec
método para importar un módulo desde una variable de cadena.Aquí estoy mostrando un ejemplo de importación del
combinations
método desde elitertools
paquete usando elexec
método:Salida:
fuente