Get full package module name

只愿长相守 提交于 2020-03-17 07:48:34

问题


For verbose debug messages in my application I'm using a function that returns a helpful prefix. Consider the following example:

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()

This outputs:

test->awesome_function_name: Doing some awesome stuff right here

My issue is: When I have a module in a package, for instance 'myproject.utilities.input', the module name returned from get_verbose_prefix is still just 'input', not 'myproject.utilities.input'. This drastically reduces the helpfulness of the prefix in large projects when there can be several 'input' modules in different submodules all working together.

So my question is: Is there a simple way of retrieving the full module name within it's package in Python? I'm planning on expanding the get_verbose_prefix function to check for '__init__.py' files in the parent directories of the module to extrapolate it's full name, but first I'd like to know if there's an easier way to do it.


回答1:


__name__ always contains the full name of the module. (Other than __main__ on main, of course.)




回答2:


Try using the __name__ attribute of the module.




回答3:


A simple way of retrieving the full module name within its package:

print(__file__)


来源:https://stackoverflow.com/questions/11705055/get-full-package-module-name

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!