[Python-es] Carga dinámica de Módulos

Chema Cortes pych3m4 en gmail.com
Mie Jun 6 23:15:19 CEST 2012


El día 6 de junio de 2012 18:42, Alvaro Manrique
<sanreikaj.foros en gmail.com> escribió:
> Buenas Tardes;
>
>     Espero se encuentren bien, a continuación comparto un
> pequeño código para cargar módulos de un paquete dinamicamente:
>
> import sys
>
> def LoadModule(module):
>
>     mod =""
>
>     try:
>
>         path =  __path__
>
>         sys.path.append(path[0])
>
>         mod = __import__(module)
>
>     except Exception, e:
>         print "LOAD MODULE",e.__class__.__name__, e
>
>     return mod
>
>
>    Este código surge desde la necesidad de poder cargar un modulo del
> paquete el cual no lo se hasta que se ejecuta cierto proceso,
> debido a que el paquete tiene muchos módulos no me pareció conveniente
> importarlos todos en el modulo que los va a usar y aparte
> de eso también se van a ir agregando muchos mas módulos al paquete.
>
>    Esta función la ejecuto en el __init__ del paquete con lo que desde el
> modulo que llama solamente importo dicha función.
>
>    Funciona perfecto pero si hay una mejor manera de implementar la idea, es
> bienvenida.

Yo hace tiempo que tenía un problema similar. Me tardaba mucho en
arrancar el interface gráfico debido a la cantidad de módulos que
importaba siempre antes de mostrar la ventana. Como no tenía claro en
qué orden era mejor importar los módulos para mejorar el arranque,
ideé un sistema con el cual los módulos no se cargan hasta que no son
accedidos por primera vez.

He recuperado ése código y lo he actualizado un poco, y está
disponible desde mi repositorio:

  <http://hg.ch3m4.org/pystore/raw/tip/VirtualModule.py>


Si quieres seguir con tu código, tal vez deberías echarle un ojo al
módulo 'imp' de la librería estándar. Te da más flexibilidad y no
necesita alterar el sys.path.



-- 
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales


Más información sobre la lista de distribución Python-es