Unsupported Python version, 3.12.0, for decompilation
# uncompyle6 version 3.9.3
# Python bytecode version base 3.12.0 (3531)
# Decompiled from: Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)]
# Embedded file name: ui.py
Unsupported Python version, 3.12.0, for decompilation
你遇到的核心问题是:uncompyle6 最高仅支持 Python 3.8 的字节码反编译,而你的 .pyc 是 Python 3.12 编译的,版本完全不兼容,因此直接提示 Unsupported Python version。
下面给出 3种解决方案,按「易用性优先级」排序:
方案1:改用支持 Python 3.12 的反编译工具(推荐)
decompyle3 是 uncompyle6 的升级版,专门适配 Python 3.7~3.12,是解决该问题的最优解:
步骤1:安装 decompyle3
# 优先用清华源加速安装
pip install decompyle3 -i https://pypi.tuna.tsinghua.edu.cn/simple
步骤2:用 decompyle3 反编译(替换 uncompyle6 命令)
# 反编译你的 ui.pyc 文件(替换为实际路径)
decompyle3 dy2.exe_extracted/ui.pyc > ui.py
# 若主程序是 dy2.pyc,同理:
decompyle3 dy2.exe_extracted/dy2.pyc > dy2.py
方案2:用跨平台的 pycdc 反编译(兼容所有 Python 3.x)
如果 decompyle3 仍有个别语法报错,可尝试 pycdc(C++ 编写,兼容性更强,支持 Python 3.0~3.12):
步骤1:下载 pycdc 预编译包(无需编译,直接用)
- 官网:https://github.com/zrax/pycdc/releases
- 选择对应系统版本:
- Windows:下载
pycdc-windows-amd64.zip - Mac/Linux:下载对应架构的二进制包
- Windows:下载
步骤2:解压后运行反编译
# Windows 示例(假设 pycdc.exe 放在桌面,ui.pyc 也在桌面)
cd Desktop
pycdc.exe ui.pyc > ui.py
方案3:降级字节码版本(进阶,适合复杂场景)
如果上述工具仍无法反编译,可通过「降级字节码」的方式让 uncompyle6 识别(原理:修改 .pyc 文件的版本头,伪装成 3.8 字节码):
步骤1:了解 .pyc 版本头格式
Python .pyc 文件前4字节是「魔法数」(对应版本):
| Python 版本 | 魔法数(16进制) | 十进制 |
|------------|------------------|--------|
| 3.8 | 0x3C0D0D0A | 1005539594 |
| 3.12 | 0x4E0D0D0A | 1305539594 |
步骤2:用十六进制编辑器修改(以 HxD 为例)
- 下载 HxD(Windows 免费十六进制编辑器:https://mh-nexus.de/en/hxd/);
- 用 HxD 打开
ui.pyc,修改前4字节:- 将
4E 0D 0D 0A(3.12 魔法数)改为3C 0D 0D 0A(3.8 魔法数);
- 将
- 保存后,再用
uncompyle6反编译:uncompyle6 ui.pyc > ui.py
⚠️ 注意:该方法可能导致部分 3.12 新语法(如 match-case)反编译出错,仅作为兜底方案。
关键总结
| 工具 | 支持 Python 版本 | 易用性 | 适配性 |
|---|---|---|---|
| uncompyle6 | 2.7~3.8 | 高 | 低(不支持3.12) |
| decompyle3 | 3.7~3.12 | 高 | 高 |
| pycdc | 3.0~3.12 | 中 | 极高 |
优先用 decompyle3,99% 的 Python 3.12 字节码都能正常反编译;若遇到个别语法报错,再换 pycdc 即可。