【发布时间】:2012-07-27 03:36:28
【问题描述】:
对于我的应用程序中的详细调试消息,我使用了一个返回有用前缀的函数。考虑以下示例:
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 返回的模块名称仍然只是“输入”,而不是“ myproject.utilities.input'。当不同的子模块中可能有多个“输入”模块一起工作时,这会大大降低前缀在大型项目中的作用。
所以我的问题是: 有没有一种简单的方法可以在 Python 的包中检索完整的模块名称?我计划扩展get_verbose_prefix 函数以检查模块父目录中的“__init__.py”文件以推断它的全名,但首先我想知道是否有更简单的方法来做到这一点。
【问题讨论】:
-
注意:在Python打包的上下文中,“包名”≠“导入路径”。包可以包含不一定以包本身命名的模块和命名空间。