获取完整的软件包模块名称

问题描述 投票:24回答:3

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

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:在这里做一些很棒的事情

我的问题是:当我在包中有一个模块时,例如“ myproject.utilities.input”,从get_verbose_prefix返回的模块名称仍然只是“ input”,而不是“ myproject.utilities”。输入”。当不同子模块中有多个“输入”模块一起工作时,这会大大降低前缀在大型项目中的有用性。

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

python inspect
3个回答
35
投票

__name__始终包含模块的全名。 (当然,主菜单上的__main__除外。)


7
投票

尝试使用模块的__name__属性。


3
投票

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

print(__file__)
© www.soinside.com 2019 - 2024. All rights reserved.