给定框架或代码对象,如何加载关联的模块文件

Given frame or code object, how do I get the associated module file loaded

在调试器中,我想验证源路径是否与 运行 中的代码匹配。在 Python 3 中执行此操作的一种方法是查看模块字节编译文件(.pyc.pyo),其中有一个字段用于源大小模 2**32 .

所以现在的问题是给定一个框架对象如何找到关联的字节编译模块路径。 (同样是 .pyc.pyo 文件)。

print(inspect.getfile(inspect.currentframe()))

会给我一个源文件名,我可以尝试将其转换为字节码模块名,但如果有更可靠的方法会更好,因为显然 Python 必须读取模块中的第一名。

最靠谱的方法是什么?

查看全局变量(它是框架的 f_globals 属性);它有丰富的信息:

  • __name__ - 模块名称
  • __file__ - 模块文件名
  • __cached__ - .pyc 字节码缓存文件名