Python - 获取完整的包模块名称

时间:2012-07-28 22:10:26

标签: python inspect

对于我的应用程序中的详细调试消息,我正在使用一个返回有用前缀的函数。请考虑以下示例:

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返回的模块名称仍然只是'输入',不是'myproject.utilities.input'。当在不同子模块中可以有多个“输入”模块共同工作时,这大大降低了大型项目中前缀的帮助性。

所以我的问题是:有没有一种简单的方法可以在Python的包中检索完整的模块名称?我正计划扩展get_verbose_prefix函数来检查模块父目录中的'__init__.py'文件,以推断它的全名,但首先我想知道是否有更简单的方法可以做它

3 个答案:

答案 0 :(得分:32)

__name__始终包含模块的全名。 (当然,除了主要的__main__之外。)

答案 1 :(得分:6)

尝试使用模块的__name__属性。

答案 2 :(得分:2)

在其包中检索完整模块名称的简单方法:

print(__file__)