如何获得foo.py的反汇编字节码?

How can I get the disassembled bytecode of foo.py?

foo.py

for i in range(10 ** 8):
    i

py_testing.py

import foo
import dis
print(dis.dis(foo))

当我执行py_testing.py时,输出结果如下:

None

如何得到foo.py的反汇编字节码?

模块对象不存储为初始化模块而执行的字节码的任何记录。最好的办法是打开模块的 .py 文件并将内容传递给 dis.dis:

with open(foo.__file__) as f:
    dis.dis(f.read())

这假设模块有一个 .py 文件。

如果导入模块成本高昂或有其他问题影响,您可以找到带有importlib.util.find_spec的模块文件而不导入它:

import importlib.util

filepath = importlib.util.find_spec('foo').origin

with open(filepath) as f:
    dis.dis(f.read())

考虑到 foo.py 中的 1 亿次迭代循环,我不想导入它。