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.)