Для подробных отладочных сообщений в моем приложении я использую функцию, которая возвращает полезный префикс. Рассмотрим следующий пример:
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 в родительских каталогах модуля, чтобы экстраполировать его полное имя, но сначала я хотел бы знать, есть ли более простой способ сделать это.