开发者

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

Is it possible to get some information out of the .py开发者_运维技巧c file that is generated from a .py file?


Tools to try

Uncompyle6 works, with some bugs, for Python 3.x, 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, try decompyle3, a fork of Uncompyle6 that works better for 3.7 and higher (according to author of Uncompyle6).

If you still have problems, check the uncompyle6 and decompyle3 READMEs which link to other tools that may work better for your code.

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.

Improving these tools

Raise GitHub issues for these projects if needed - both run unit test suites on a range of Python versions.

Funding is apparently a limitation on supporting more recent Python versions (3.7 onwards) in uncompyle6 and decompyle3 - sending donations would help.

Preventing loss of code in future

See this answer for some tips that may work in your editor or IDE, including VS Code and PyCharm.


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.


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:

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

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


Decompyle++ (pycdc) was the only one that worked for me: https://github.com/zrax/pycdc

was suggested in Decompile Python 2.7 .pyc


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.


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.


Install using pip install pycompyle6

pycompyle6 filename.pyc


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜