¿Es posible descompilar un archivo compilado .pyc en un archivo .py?


Respuestas:


169

Uncompyle6 funciona para Python 3.xy 2.7: opción recomendada, ya que es la herramienta más reciente, con el objetivo de unificar las horquillas anteriores y centrarse en las pruebas unitarias automatizadas. La página de GitHub tiene más detalles.

  • si usa Python 3.7+, también puede intentar descompilar3 , una bifurcación de Uncompyle6 que se enfoca en 3.7 y superior.
  • plantee problemas de GitHub en estos proyectos si es necesario: ambos ejecutan suites de pruebas unitarias en una variedad de versiones de Python

El Uncompyle2 anterior solo es compatible con Python 2.7. Esto funcionó bien para mí hace algún tiempo descompilar el bytecode .pyc en .py, mientras que unpyclib se bloqueó con una excepción.

Con todas estas herramientas, recupera su código, incluidos los nombres de variables, pero sin los comentarios.


77
Muchas gracias. Accidentalmente eliminé mi archivo .py en lugar de .pyc. Esto me salvó de tener que reescribirlo desde cero.
avmohan

21
Para aquellos de ustedes aquí porque has borrado accidentalmente el archivo equivocado, yo altamente recomiendo control de la fuente!
Andrew Palmer

30

Sí, puede obtenerlo con unpyclibeso se puede encontrar en pypi .

$ pip install unpyclib

Entonces puedes descompilar tu archivo .pyc

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

20
Intenté esto y se bloqueó con una excepción, en un archivo bastante pequeño sin código complejo (Django settings.py) - Unpypy2 funcionó bien en su lugar. -1 por ese motivo.
RichVel

9
Se bloqueó en Python 3.6 en lib \ site-packages \ unpyclib \ applcation.py con print __copyright: ¿por qué está usando la versión Python 2.7 printsin paréntesis?
David Ching

1
unpyclibEl primer y último lanzamiento de @DavidChing fue en 2009 , es seguro decir que es un programa exclusivo de Python 2.
Boris

28

Puedes probar Easy Python Decompiler . Está basado en Decompyle ++ y Uncompyle2. Es compatible con la descomposición de las versiones de Python 1.0-3.3

Nota: Soy el autor de la herramienta anterior.


55
Hace su trabajo Buen trabajo. Por cierto, ¿escribiste esta herramienta en Python?
Shinzou

1
Me funcionó bien (arrastrar y soltar fácilmente). Es cierto que una distribución de Linux sería agradable, pero no es tan difícil abrir una ventana de Windows.
Brian Jackson

Último lanzamiento en 2015 y parece que es de código cerrado?
Boris


4

.

Yo uso uncompyle6 descompilar (incluso soporta el nuevo Python 3.8.0):

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

y la comparación de Python de origen y Python descompilado se ve así:

Pyc no compila utilidades

para que pueda ver, casi lo mismo, el efecto de descompilación es MUY BUENO .


3

Sí, es posible.

Hay un descompilador perfecto de código abierto Python (.PYC), llamado Decompyle ++ https://github.com/zrax/pycdc/

Decompyle ++ tiene como objetivo traducir el código de byte compilado de Python nuevamente en un código fuente Python válido y legible por humanos. Mientras que otros proyectos han logrado esto con un éxito variado, Decompyle ++ es único en el sentido de que busca admitir el código de bytes de cualquier versión de Python.


2
Si bien pycdc es bueno, no es perfecto. Si observa github.com/zrax/pycdc/issues, hay más de 50 tipos individuales de problemas que tiene en la descompilación. Sin embargo, esto se extiende a lo largo de las 16 versiones de Python, y tanto el lenguaje como el código han cambiado drásticamente. Puede ser que por las cosas que ha intentado no haya podido encontrar un problema. Sin embargo, en mi opinión, para clasificar algo como "perfecto", habría que tomar por ejemplo toda la biblioteca de Python para cada versión, descompilarla y hacer que pase sus propias pruebas correctamente. Ningún descompilador puede hacer eso todavía.
rocoso el

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.