Подтвердить что ты не робот

Python - получить полное имя модуля пакета

Для подробных сообщений об отладке в моем приложении я использую функцию, которая возвращает полезный префикс. Рассмотрим следующий пример:

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

4b9b3361

Ответ 1

__name__ всегда содержит полное имя модуля. (За исключением __main__ на основном, конечно.)

Ответ 2

Попробуйте использовать атрибут __name__ модуля.

Ответ 3

Простой способ получить полное имя модуля в своем пакете:

print(__file__)