code python inspect

code - Python-obtener el nombre del módulo de paquete completo



python inspect signature (3)

Intente usar el atributo __name__ del módulo.

Para mensajes de depuración detallados en mi aplicación, estoy usando una función que devuelve un prefijo útil. Considere el siguiente ejemplo:

import inspect def get_verbose_prefix(): """Returns an informative prefix for verbose debug output messages""" s = inspect.stack() module_name = inspect.getmodulename(s[1][1]) func_name = s[1][3] return ''%s->%s'' % (module_name, func_name) def awesome_function_name(): print "%s: Doing some awesome stuff right here" % get_verbose_prefix() if __name__ == ''__main__'': awesome_function_name()

Esto produce:

test->awesome_function_name: Doing some awesome stuff right here

Mi problema es: cuando tengo un módulo en un paquete, por ejemplo ''myproject.utilities.input'', el nombre del módulo devuelto por get_verbose_prefix sigue siendo ''input'', no ''myproject.utilities.input''. Esto reduce drásticamente la utilidad del prefijo en proyectos grandes cuando puede haber varios módulos de ''entrada'' en diferentes submódulos trabajando todos juntos.

Entonces, mi pregunta es: ¿hay una forma sencilla de recuperar el nombre completo del módulo dentro de su paquete en Python? Estoy planeando expandir la función get_verbose_prefix para buscar archivos ''__init__.py'' en los directorios principales del módulo para extrapolar su nombre completo, pero primero me gustaría saber si hay una manera más fácil de hacerlo.


Una forma sencilla de recuperar el nombre completo del módulo dentro de su paquete:

print(__file__)


__name__ siempre contiene el nombre completo del módulo. (Aparte de __main__ en main, por supuesto.)