{
  "added_at": "2026-10-19",
  "additional_evidence_urls": [
    "https://github.com/rocky/python-uncompyle6/blob/91298ba80e322cfb8736ab8a697509527297a7a9/README.rst#L77-L126",
    "https://github.com/rocky/python-uncompyle6/blob/91298ba80e322cfb8736ab8a697509527297a7a9/README.rst#L176-L299",
    "https://github.com/rocky/python-uncompyle6/blob/91298ba80e322cfb8736ab8a697509527297a7a9/NEWS.md",
    "https://github.com/rocky/python-uncompyle6/blob/91298ba80e322cfb8736ab8a697509527297a7a9/pyproject.toml",
    "https://github.com/rocky/python-uncompyle6/blob/91298ba80e322cfb8736ab8a697509527297a7a9/uncompyle6/version.py",
    "https://github.com/rocky/python-uncompyle6/blob/91298ba80e322cfb8736ab8a697509527297a7a9/COPYING",
    "https://github.com/rocky/python-uncompyle6/releases/tag/3.9.3",
    "https://pypi.org/project/uncompyle6/3.9.3/"
  ],
  "category": "native-analysis",
  "description_en": "Cross-version decompiler that translates Python bytecode back into equivalent Python source, accepting bytecode from Python 1.0 through 3.8 as well as some PyPy bytecode and Dropbox's Python 2.5. It disassembles code objects with the companion xdis library and parses the instruction stream into a grammar-based tree from which source is printed; it can also deparse just the fragment around a given bytecode offset, which the author's trepan debuggers use for exact location reporting. It succeeds the older decompyle, uncompyle and uncompyle2 forks.",
  "description_zh": "跨版本的 Python 反编译器，可把 Python 字节码还原为等价的 Python 源码，支持 Python 1.0 至 3.8 的字节码，以及部分 PyPy 字节码和 Dropbox 的 Python 2.5 字节码。它借助配套的 xdis 库反汇编代码对象，再把指令流解析成基于语法的树并据此输出源码；它还能只反解析给定字节码偏移附近的代码片段，作者的 trepan 调试器即用此功能精确报告位置。它是早期 decompyle、uncompyle 和 uncompyle2 等分支的后继项目。",
  "entry_url": "https://awesomerea.org/resources/uncompyle6/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/uncompyle6/",
  "evidence_url": "https://github.com/rocky/python-uncompyle6/blob/91298ba80e322cfb8736ab8a697509527297a7a9/README.rst",
  "group": "tools",
  "id": "uncompyle6",
  "json_url": "https://awesomerea.org/resources/uncompyle6/record.json",
  "kind": "tool",
  "markdown_url": "https://awesomerea.org/resources/uncompyle6/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/uncompyle6/index.md",
  "name": "uncompyle6",
  "name_zh": "uncompyle6 跨版本 Python 字节码反编译器",
  "record_type": "resource",
  "relationship": "foundation",
  "requirements": [
    "Latest release at review: 3.9.3, published 2025-09-29 on GitHub and PyPI; the reviewed master commit is 34 commits later and reports 3.9.4.dev0. Installing from PyPI, like the master branch, is meant for running on Python 3.11+; older interpreters back to Python 2.4 use the version-specific tarballs, eggs or wheels on GitHub Releases, built from separate git branches. It depends on xdis 6.3+, spark-parser and click.",
    "The README reports testing on bytecode from Python 1.4, 2.1–2.7 and 3.0–3.8 and later PyPy versions. Python 3 support is strongest around 3.3–3.4 and weakens further away, control flow is the biggest known problem, and the author does not intend serious work on 3.8 or 3.9, pointing to the separate decompyle3 for 3.7 and 3.8. Bytecode newer than 3.8 is not decompiled, and candidate-release magic numbers, some Python 3.6 magic variants, encrypted or custom-interpreter bytecode other than Dropbox's old 2.5, obfuscated code, Cython and MicroPython are not handled.",
    "Input .pyc or .pyo files come from the user; it cannot decompile Py2EXE executables directly, and bytecode bundled by such packagers has to be extracted first. The --syntax-verify option checks only that the output is valid Python syntax, so the README suggests cross-checking with other uncompyle6 versions or other decompilers such as pycdc. Recovered source remains subject to the rights of the original program’s owner.",
    "GPL-3.0-or-later per pyproject.toml, with the GPL-3.0 text in COPYING."
  ],
  "requirements_zh": [
    "审阅时最新版本为 3.9.3，于 2025-09-29 在 GitHub 和 PyPI 发布；所审阅的 master 提交比该版本晚 34 个提交，版本号为 3.9.4.dev0。与 master 分支一样，从 PyPI 安装的版本面向 Python 3.11+ 运行环境；更早的解释器（最早到 Python 2.4）需使用 GitHub Releases 中按版本区分的源码包、egg 或 wheel，它们由各自独立的 git 分支构建。依赖 xdis 6.3+、spark-parser 和 click。",
    "README 称已用 Python 1.4、2.1–2.7、3.0–3.8 以及较新 PyPy 版本的字节码测试过。对 Python 3 的支持以 3.3–3.4 附近最好，离这两个版本越远越弱；控制流是最大的已知问题，作者也不打算认真投入 3.8 或 3.9 的支持，并建议 3.7 和 3.8 改用独立的 decompyle3。高于 3.8 的字节码不会被反编译；候选发布版本的魔数、部分 Python 3.6 魔数变体、除 Dropbox 旧版 2.5 以外的加密或定制解释器字节码、混淆代码以及 Cython 和 MicroPython 均不受支持。",
    "输入的 .pyc 或 .pyo 文件由使用者提供；它不能直接反编译 Py2EXE 生成的可执行文件，这类打包程序中的字节码需先行提取。--syntax-verify 选项只检查输出是否为合法的 Python 语法，因此 README 建议用其他版本的 uncompyle6 或 pycdc 等其他反编译器交叉核对。恢复出的源码仍受原程序权利人的权利约束。",
    "pyproject.toml 声明采用 GPL-3.0-or-later，COPYING 收录 GPL-3.0 全文。"
  ],
  "targets": [
    "app",
    "binary"
  ],
  "url": "https://github.com/rocky/python-uncompyle6",
  "verification": "source-reviewed",
  "verified_at": "2026-10-19"
}
