如果您有权访问sys.modules,是否可以为已加载的模块构建人类可读的源?
人们告诉我你不能,但我确信它可以在Python中使用。
答案 0 :(得分:4)
您可以使用标准库的dis模块来反汇编Python编码的模块:它产生绝对人类可读的源,而不是 Python 源,而是字节码< / em>来源。从煎蛋卷开始将鸡蛋放回原处是一件困难的事。
过去曾经有一个针对Python 2.3的反编译器(参见here),但我不知道是否有人在过去几年中一直在维护它,这表明在这个任务中没有太多的兴趣。开源社区。如果你不同意,你可以分叉那个项目,制作你自己的项目,目标是反编译2.7(或者你渴望反编译的任何Python版本),并吸引其他人热衷于这个任务 - 如果你能找到它们,那就是。
答案 1 :(得分: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