A cross-version Python bytecode decompiler
Go to file
2015-12-15 12:10:03 -05:00
bin Split out marhsal and disassemble code and spell disassemble correctly. 2015-12-15 12:10:03 -05:00
test Split out marhsal and disassemble code and spell disassemble correctly. 2015-12-15 12:10:03 -05:00
uncompyle6 Split out marhsal and disassemble code and spell disassemble correctly. 2015-12-15 12:10:03 -05:00
__pkginfo__.py Split out marhsal and disassemble code and spell disassemble correctly. 2015-12-15 12:10:03 -05:00
.gitignore Split out marhsal and disassemble code and spell disassemble correctly. 2015-12-15 12:10:03 -05:00
.travis.yml Clean up travis file now that I know what works 2015-12-14 15:37:57 -05:00
circle.yml Do setup install on CI boxes 2015-12-14 15:30:35 -05:00
compile_tests first commit 2012-06-05 10:46:41 +02:00
Makefile Add a standalone disassemble utility. __init__.py: Shun using 0, 1 for booleans 2015-12-14 22:01:58 -05:00
MANIFEST.in scripts->bin. Add pydisassemble to list of scripts to install 2015-12-14 22:12:54 -05:00
PKG-INFO README.rst: note addition of pydisassemble 2015-12-15 01:42:07 -05:00
README.rst Update README.rst 2015-12-15 02:18:12 -05:00
setup.cfg MAJ owner/information 2012-06-05 11:37:42 +02:00
setup.py Package scripts correctly now 2015-12-14 22:18:26 -05:00
tox.ini Minimal disassemble, ast compile and deparse work on Python 3. 2015-12-12 13:22:44 -05:00

uncompyle6
==========

A Python 2.x and possibly 3.x byte-code decompiler.

This is written in Python 2.7 but is Python3 compatible.


Introduction
------------

*uncompyle6* converts Python byte-code back into equivalent Python
source code. It accepts byte-codes from Python version 2.5 to 2.7.
It runs on Python 2.7 and with a little more work Python 3.

The generated source is fairly readable: docstrings, lists, tuples and
hashes are somewhat pretty-printed.

*uncompyle6* is based on John Aycock's generic small languages
compiler 'spark' (http://www.csr.uvic.ca/~aycock/python/) and his
prior work on a tool called 'decompyle'. This was improved by Hartmut Goebel
`http://www.crazy-compilers.com/`_

# Additional note (3 July 2004):

This software is no longer available from the original website.
However http://www.crazy-compilers.com/decompyle/ provides a
decompilation service.

# Additional note (5 June 2012):

The decompilation of python bytecode 2.5 & 2.6 is based on the work of
Eloi Vanderbeken. bytecode is translated to a pseudo 2.7 python bytecode
and then decompiled.

# Additional note (12 Dec 2016):

I will be using this to deparse fragments of code inside my trepan_
debuggers_. For that, I need to record text fragements for all
byte-code offsets (of interest). This purpose although largely
compatible with the original intention is yet a little bit different.


Features
--------

- decompiles Python byte-code into equivalent Python source
- decompiles byte-code from Python version 2.5, 2.6, 2.7
- pretty-prints docstrings, hashes, lists and tuples
- reads directly from .pyc/.pyo files, bulk-decompile whole directories
- output may be written to file, a directory or to stdout
- option for including byte-code disassembly into generated source

Requirements
------------

The code runs on Python 2.7. It is compatable with Python3,
and I've run some tests there, but more work is needed to make that
more solid.

Work to support decompyling Python 3 bytecodes and magics is
still needed.


Installation
------------

This uses setup.py, so it follows the standard Python routine:

::

    python setup.py install # may need sudo
    # or if you have pyenv:
    python setup.py develop

A GNU makefile is also provided so `make install` (possibly as root or
sudo) will do the steps above.

Testing
-------

Testing right now is largely via utility `test/test_pythonlib.py`.  A
GNU makefile has been added to smooth over setting running the right
command. If you have remake_ installed, you can see the list of all
tasks including tests via `remake --tasks`


Usage
-----

Run

::

     ./bin/uncompyle6 -h
     ./bin/pydisassemble -y

for usage help


Known Bugs/Restrictions
-----------------------

Support Python 3 bytecode and syntax is lacking.

.. _trepan: https://pypi.python.org/pypi/trepan
.. _debuggers: https://pypi.python.org/pypi/trepan3k
.. _remake: https://bashdb.sf.net/remake