2012-02-03 38 views
8

Tengo un nombre de módulo largo y quiero evitar tener que escribirlo todo repetidas veces en mi documento. Simplemente puedo hacer import long_ass_module_name as lamn y llamarlo de esa manera. Sin embargo, este módulo tiene muchos submódulos que deseo importar y usar también.Python: ¿cómo se puede usar el alias de un módulo para importar sus submódulos?

En este caso no podré escribir import lamn.sub_module_1 porque la importación de Python no reconoce este alias que hice para mi long_ass_module_name. ¿Cómo puedo conseguir esto?

¿Debo simplemente importar automáticamente todos los submódulos en el módulo principal __init__.py?

Respuesta

11

Un objeto con alias todavía cambia al importar submódulos,

import my_long_module_name as mlmn 
import my_long_module_name.submodule 

mlmn.submodule.function() 

La declaración import siempre toma el nombre completo del módulo. El módulo es solo un objeto, e importar un submódulo agregará un atributo a ese objeto.

1

esta manera (muy unrecommendable) de la importación de todos los miembros de un objeto en el espacio de nombres actual funciona buscando el diccionario vars():

import my_bad_ass_long_module.bafd as b 

# get __dict__ of current namespace 
myn = vars() 
for k,v in vars(b).items(): 
    # populate this namespace with the all the members of the b namespace (overwriting!) 
    myn[k] = v 
Cuestiones relacionadas