1

如果您可以访问 sys.modules,是否可以为加载的模块构建人类可读的源代码?

人们告诉我你不能,但我确信这在 Python 中是可能的。

4

2 回答 2

4

您可以使用标准库的dis模块来反汇编 Python 编码的模块:它产生绝对是人类可读的源代码,而不是Python源代码,而是字节码源代码。从煎蛋卷开始将鸡蛋重新组合起来有点困难。

Python 2.3 曾经有一个反编译器(请参阅此处),但我不知道过去几年是否有人一直在维护它,这表明开源社区对这项任务没有太大兴趣。如果你不同意,你可以分叉那个项目,创建你自己的项目,目标是反编译 2.7(或任何你渴望反编译的 Python 版本),并吸引其他热衷于这项任务的人——如果你能找到他们,那就是。

于 2010-08-21T16:55:39.870 回答
0

通常,源代码将在文件系统中可用,在可以从 sys.modules 中轻松发现的位置。

for name, mod in sys.modules.items():
    try:
        fname = mod.__file__
    except AttributeError:
        continue
    if fname.endswith(".pyc"):
        fname = fname[:-1]
    try:
        fcode = open(fname)
    except IOError:
        continue
    code = fcode.read()
    # .. do something with name and code
于 2010-08-21T17:20:02.713 回答