Is it possible to decompile a compiled .pyc file into a .py file?

PythonDecompilingPycCompiled

Python Problem Overview


Is it possible to get some information out of the .pyc file that is generated from a .py file?

Python Solutions


Solution 1 - Python

Uncompyle6 works for Python 3.x and 2.7 - recommended option as it's most recent tool, aiming to unify earlier forks and focusing on automated unit testing. The GitHub page has more details.

  • If you use Python 3.7+, you could also try decompyle3, a fork of Uncompyle6 focusing on 3.7 and higher.
  • Do raise GitHub issues on these projects if needed - both run unit test suites on a range of Python versions.

With these tools, you get your code back including variable names and docstrings, but without the comments.

The older Uncompyle2 supports Python 2.7 only. This worked well for me some time ago to decompile the .pyc bytecode into .py, whereas unpyclib crashed with an exception.

Solution 2 - Python

You may try Easy Python Decompiler. It's based on Decompyle++ and Uncompyle2. It's supports decompiling python versions 1.0-3.3

Note: I am the author of the above tool.

Solution 3 - Python

Yes, you can get it with unpyclib that can be found on pypi.

$ pip install unpyclib

Than you can decompile your .pyc file

$ python -m unpyclib.application -Dq path/to/file.pyc

Solution 4 - Python

Yes.

I use uncompyle6 decompile (even support latest Python 3.8.0):

uncompyle6 utils.cpython-38.pyc > utils.py

and the origin python and decompiled python comparing look like this:

pyc uncompile utils

so you can see, ALMOST same, decompile effect is VERY GOOD.

Solution 5 - Python

Solution 6 - Python

Yes, it is possible.

There is a perfect open-source Python (.PYC) decompiler, called Decompyle++ https://github.com/zrax/pycdc/

Decompyle++ aims to translate compiled Python byte-code back into valid and human-readable Python source code. While other projects have achieved this with varied success, Decompyle++ is unique in that it seeks to support byte-code from any version of Python.

Solution 7 - Python

I've been at this for a couple hours and finally have a solution using Decompyle++:

  • visit https://cmake.org/download/ and install CMake.
  • visit https://github.com/zrax/pycdc and grab a copy of this repo: pycdc-master.
  • add C:\Program Files\CMake\bin to your system environment variables under PATH.

I suggest putting your pycdc-master folder into another folder, like anotherFolder.

Now you can run these commands in the command line:

  • cd anotherFolder to go into the folder that has pycdc-master in it.
  • cmake pycdc-master
  • cd ../ to go up one directory,
  • then: cmake --build anotherFolder

pycdc.exe will then be in anotherFolder\Debug.

Do something like pycdc.exe onlyhopeofgettingmycodeback.pyc in a console and it will print out the source code. I had Python 3.9.6 source code and nothing else was working.

Solution 8 - Python

Install using pip install pycompyle6

pycompyle6 filename.pyc

Solution 9 - Python

If you need to decompile a pyc but have python 3.9 installed you can force uncompyle6 to run. It's not perfect but it does work. Just edit site-packages\uncompyle6\bin\uncompile.py

def main_bin():
if not (sys.version_info[0:2] in ((2, 6), (2, 7), (3, 0),
                                  (3, 1), (3, 2), (3, 3),
                                  (3, 4), (3, 5), (3, 6),
                                  (3, 7), (3, 8), (3, 9)

Just add the version you have installed in the same format as the others and save. It will at least run.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHoward View Question on Stackoverflow
Solution 1 - PythonRichVelView Answer on Stackoverflow
Solution 2 - PythonExtreme CodersView Answer on Stackoverflow
Solution 3 - PythonPokutnikView Answer on Stackoverflow
Solution 4 - PythoncrifanView Answer on Stackoverflow
Solution 5 - PythonKenneth HosteView Answer on Stackoverflow
Solution 6 - PythonAndrew RukinView Answer on Stackoverflow
Solution 7 - PythonKhemrindView Answer on Stackoverflow
Solution 8 - PythonBanik KuntalView Answer on Stackoverflow
Solution 9 - PythonCLippView Answer on Stackoverflow