在 运行 cProfile 时获取当前模块

Fetch current module while running cProfile

我想获得我的模块(列出所有函数名称),即使在使用 cProfile 时也是如此。我该怎么做?

澄清一下,我在我自己的模块中使用了一些内省,但是 sys.modules[__main__] 当 运行 -m cProfile 时当然不再 return 我自己的模块了。

要复制,请创建 modtest.py:

#!/usr/bin/env python3
import sys
print(sys.modules[__name__])

运行 是这样的:

$ ./modtest.py
<module '__main__' from './modtest.py'>
$ python -m cProfile ./modtest.py
<module 'cProfile' from '...cProfile.py'>

如何让最后一行说 from './modtest.py'

当您将模块作为参数提供给 cProfile 时,您将无法从 sys.modules 获取模块对象。 cProfile 甚至不为你导入模块,它只是执行它,执行完后你甚至无法从 sys.modules 中获取它。

当运行通过-m开关时,__main__必然指向cProfile,没有改变。

您始终可以从 sys.argv[0] 获取模块 name,使用 importlib 自行导入,然后列出函数名称。