Is it possible to get some information out of the .pyc file that is generated from a .py file?
10 Answers
Intro
Python decompilation is a hard problem, particularly for recent 3.x versions. That's why there are various tools, all with limitations and bugs.
However, Python 2.7 and earlier 3.x versions should work pretty well, and even partial decompilation is better than losing everything.
Tools to try
Uncompyle6 works, with some bugs, for Python up to 3.8, and works well for 2.7.
- Recommended option to start with as it's aiming to unify earlier forks and focusing on automated unit testing.
- The uncompyle6 GitHub page has more details.
- Works best for earlier 3.x versions, not best choice for 3.7+
If that doesn't work, it's probably best to try this next - particularly for Python 3.7+:
- decompyle3 is a fork of Uncompyle6, from same author, that should work better for 3.7 and 3.8. Note that this
decompyle3package is from therocky/decompile3repo - different spelling but same thing
If you still have problems, check the uncompyle6 and decompyle3 READMEs which link to other tools that may work better for your code.
Update: Decompyle++ (pycdc) is a recent tool that aims to decompile bytecode from any Python version. It's not clear how complete or correct it is, but it seems somewhat active as of 2025.
- See this answer for background, and this answer for experience with Python 3.9.
Limitations
You can get your code back including variable names and doc strings, but without the comments.
Some code may not successfully decompile, particularly with unusual control flow, or more recent Python 3.x versions. This is due to bugs in these decompilers where Python has changed its bytecode over time.
Supporting recent Python versions
Neither uncompyle6 or decompyle3 support Python 3.9 or higher, and support for 3.7 or higher is limited.
- However,
decompyle++aims to support more recent versions - see above.
New optimizations in Python are making decompilation harder, and both code contributions and sponsorship are lacking for these decompiler projects.
What you can do to help:
- Raise GitHub issues for these projects with bugs, after checking for similar issues - both run unit test suites on a range of Python versions.
- Sponsor these projects, particularly if they helped you
Preventing loss of code in future
Frequent Git commits or backups are clearly a good idea.
Some editors/IDEs have features to help recover deleted files even if not committed to Git. See this answer for some pointers that may work in your editor or IDE, including VS Code and JetBrains IDEs such as PyCharm, GoLand and IntelliJ.
7 Comments
uncompyle6 is also available online at decompiler.comYou 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.
9 Comments
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:

so you can see, ALMOST same, decompile effect is VERY GOOD.
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 3 Comments
print __copyright -- why is it using the Python 2.7 version of print without parenthesis?unpyclib's first and last release was in 2009, safe to say it's a Python 2 only program.Decompyle++ (pycdc) was the only one that worked for me: https://github.com/zrax/pycdc
was suggested in Decompile Python 2.7 .pyc
1 Comment
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/pycdcand grab a copy of this repo:pycdc-master. - add
C:\Program Files\CMake\binto 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 anotherFolderto go into the folder that haspycdc-masterin it.cmake pycdc-mastercd ../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.
2 Comments
build folder inside the repo and then inside the build folder you call cmake ..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.
3 Comments
rocky it's now 6 years later and now there are 3 times as many issues, a dozen or more ignored PRs, and there is often denial that there are problems when new issues are reported. a shame because despite taking a "hardcoded approach" to bytecode support it had a lot of promise.pycdc are low quality (often from reverse engineers who don't understand GitHub conventions), so I think that accounts for many being closed without solution. The maintainer seems overworked, as in many open source projects, but there is an open issue for 3.11 support.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.
Title: Extracting Files from PyInstaller-Generated Executable
Problem:
How can I extract files from an executable created by PyInstaller?
Solution:
Clone the pyinstxtractor-ng repository:
git clone https://github.com/pyinstxtractor/pyinstxtractor-ng.gitExtract the executable:
cd pyinstxtractor-ng python pyinstxtractor-ng.py "<path_to_/dist/app>"Install dependencies:
sudo yum install cmake make clangClone the pycdc repository:
git clone https://github.com/zrax/pycdc.gitBuild and compile:
cd pycdc cmake CMakeLists.txt makeDecompile the bytecode:
./pycdc "<path_to_/app_extracted/app.pyc>"
By following these steps, you can extract and decompile files from a PyInstaller-generated executable.