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