在线pyc/pyo/py文件反编译

pyc 反编译 Python 1.0 – 3.12 3.13 仅反汇编 更新于 2026-11-04
把 .pyc / .pyo 拖到这里,或 点击选择 单个文件不超过 5 MB · 一次一个,换文件直接再拖一个进来
已选 0 个文件
输出内容
选一个 .pyc 或 .pyo,点「开始反编译」。支持 Python 1.0 – 3.13:1.0 – 3.12 可直接还原成源码,3.13 提供指令级反汇编;文件头缺了也能自动补全。
结果 还没开始 反编译结果可以直接存成 .py
文件只在内存里转:上传后直接解析,结果立刻返回,不落盘、不写日志;字节码只被还原成文本,不会被执行。

工具介绍

把编译好的 .pyc(或 .pyo)拖进来,就能拿回可读的 .py 源码。不需要装任何环境,也不用上传到别处 —— 文件只在内存里过一遍,结果直接显示在页面上。

有些从安装包、加固壳或旧项目里翻出来的字节码,文件头被剥掉或版本标记被清零,普通的反编译工具会直接判成「不是 pyc」。这里会先看内容再判断:缺头就按候选版本逐个试,能读出完整代码的那一份才采用,并在结果里注明版本号是推断的。

支持的版本

字节码版本还原成源码指令级反汇编说明
Python 1.0 – 3.12支持支持常规项目直接看源码
Python 3.13暂不支持支持新版本指令尚未覆盖,给指令清单
文件头缺了 / 被抹掉支持支持自动补全并推断版本,结果里会标注「推断」
认不出的版本——直接报错,不返回假结果

应用场景

想做什么怎么做输出
源码丢了只剩部署产物把 __pycache__ 里的 pyc 拖进来,拿回能读的 .py 再继续改Python 源码
接手别人的项目反编译后看调用顺序、常量表、异常分支,比读字节码快得多Python 源码
排查「线上跑的和仓库不一样」反编译线上 pyc,和仓库源码对比,差异一目了然Python 源码
教学 / 学习字节码同一份代码先编译再反编译,对照看 CPython 把你的写法变成了什么两者都行
新版格式暂无源码看反汇编里的常量与函数结构,定位到关键函数再逐条还原反汇编

免责声明

常见问题

为什么 3.13 的文件只有反汇编?

Python 3.13 改了字节码指令,目前还不能把它的源码结构完整还原出来。为了避免给出「看着成功、其实错了」的结果,这类文件统一提供指令级反汇编:常量、函数结构、调用顺序都在,只是没有成段的源码语句。

还原出来的代码能直接跑吗?

常见写法基本可用,但不要指望逐字还原:注释全部丢失,缩进统一重排,部分局部变量名会退化。循环与异常这类控制流最容易走样(例如 while 被拆成 if + continue,逻辑就变了)。页面会做语法与结构检查,问题会点出行号或说明「哪几处要手改」;标了提示的位置,建议对照反汇编改回来再用。

文件安全吗?会被留存吗?

不会留存,也不会被执行。文件上传后只在内存中处理,结果返回即刻丢弃;全程只做静态还原,没有任何执行你代码的动作,也不会把文件交给第三方。

文件头被清掉了,还能反编译吗?

能。有些工具在打包或加固时会剥掉 pyc 开头那段「版本 + 时间戳」,甚至把前几个字节写成 0,导致普通工具直接认不出来。这里先看内容像不像代码,再按常见版本逐个试解,挑还原得最完整、语法最通顺的那一份;结果里的版本号后面会标「推断」,说明它不是文件里写着的。整段头都没了、只剩下裸代码的情况同样能处理。

提示「认不出这个文件的字节码版本」是怎么回事?

常见三种情况:文件被截断(网盘下载没传完)、拿到的其实是加密 / 加固后的 pyc(正文被加密,不是头部问题)、以及这压根不是 pyc(比如 .pyd / .dll 这类机器码文件)。换一个完整的文件重新上传即可。

PyInstaller / Nuitka 打出来的程序能反编译吗?

PyInstaller 可以:先解包出内部的 pyc 文件,逐个拖进来(能不能出源码看打包用的 Python 版本,3.13 及以上只能拿反汇编)。Nuitka、Cython 编出来的是机器码,不含 Python 字节码,这类工具帮不上忙。

更新日志

2026-10-21
功能体验升级与性能优化
2026-10-21
工具正式上线发布
2026-10-21
工具正式上线发布
2018-08-09
工具正式上线发布

相关工具推荐