Importar modulos sin saber el nombre

Oswaldo Hernández listas en soft-com.es
Lun Sep 1 11:36:38 CEST 2008


Milton Galo Patricio Inostroza Aguilera escribió:
> El día 29 de agosto de 2008 5:41, Oswaldo Hernández
> <listas en soft-com.es> escribió:
>> Cristina Yenyxe González García escribió:
>>> Hola:
>>> 2008/8/29 Oswaldo Hernández <listas en soft-com.es>
>>>
>>>> La pregunta es:
>>>> ¿Conoceis alguna otra forma de importar los modulos de un directorio sin
>>>> tener que recurrir a leer
>>>> los ficheros que contiene?
>>>
>>> Si los tienes realmente organizados como un paquete, es decir, dentro del
>>> directorio hay un fichero __init__.py, lo único que necesitarías sería
>>> definir una variable global __all__ dentro de dicho módulo, indicando
>>> todos
>>> los que se pueden importar. Tal que así:
>>> __all__ = [ "modulo1", "modulo2", ... "moduloN" ]
>>> Después, solo necesitarías utilizar la sentencia "import
>>> nombre_del_paquete"
>>> o "from nombre_del_paquete import *" (esta última no es la práctica más
>>> recomendada en cuestiones de estilo, pero si ya sabes que vas a importarlo
>>> TODO...) donde proceda.
>>>
>>>> Gracias.
>>>>
>>> De nada, espero que te sirva esta solución :)
>>>
>> La idea es poder hacerlo sin necesidad de modificar __init__.py, ni ningun
>> otro archivo de registro de modulos. Simplemente importar los modulos que se
>> han depositado en ese directorio.
> 
> Si ese directorio tiene el archivo __init__.py, bastaría sólo con
> poner un from tuModulo import * (no es muy elegante pero yo lo acabo
> de hacer y funciona)
> 

Cristina, Milton, disculpad el retraso en la repuesta.


- "from paquete import *"
No me funciona con el __init__.py vacio, no importa los modulos que hay en el directorio.
Si funciona, si en __init__.py incluyo: __all__ = ["modulo1", ...]
De todas formas esta sintaxis no me interesa puesto que incluiria los modulos importados 
directamente en el espacio de nombres del modulo que realiza la importacion.

- "import paquete"
No me importa los modulos que contiene el directorio aunque incluya __all__ = ["modulo1", ...] 
dentro del __init__.py

Continuaré probando, gracias por vuestras repuestas.


-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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