Для подробных отладочных сообщений в моем приложении я использую функцию, которая возвращает полезный префикс. Рассмотрим следующий пример:
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()
Это выводит:
test->awesome_function_name: Doing some awesome stuff right here
Моя проблема:Когда у меня есть модуль в пакете, например, «myproject.utilities.input», имя модуля, возвращаемое из get_verbose_prefix
, по-прежнему остается просто «input», а не «myproject.utilities.input». Это резко снижает полезность префикса в больших проектах, когда может быть несколько «входных» модулей в разных подмодулях, работающих вместе.
Итак, мой вопрос:Есть ли простой способ получить полное имя модуля в его пакете в Python? Я планирую расширить функцию get_verbose_prefix
для проверки файлов «__init __.py» в родительских каталогах модуля, чтобы экстраполировать его полное имя, но сначала я хотел бы знать, есть ли более простой способ сделать это.