2011-11-18 21 views
37

Ho cercato su e giù, ma non riesco a trovare un de-compilatore che funzioni per Python 2.7 .pyc. Qualcuno ne conosce uno che funzioni per Python 2.7? GrazieDecompile Python 2.7 .pyc

risposta

13

Questo suona come funziona: http://code.google.com/p/unpyc/

Numero 8 dice che supporta 2.7: http://code.google.com/p/unpyc/updates/list

UPDATE (2013/09/03) - Come notato nei commenti e in altre risposte, si dovrebbe guardare https://github.com/wibiti/uncompyle2 o https://github.com/gstarnberger/uncompyle invece di unpyc.

+1

Anche dopo l'applicazione della patch nel numero 8, non posso ottenere questo al lavoro con Python 2.7. –

+1

si arresta in modo anomalo con eccezione su Python 2.7 - usa Uncompyle2 – RichVel

+0

Ho scartato la risposta perché non funziona con python 2.7 –

3

Ned Batchelder ha pubblicato un short script che eseguirà un file .pyc unmarshal e disassemblerà qualsiasi oggetto di codice all'interno, in modo da poter visualizzare il codice byte Python. Sembra che con le versioni più recenti di Python, è necessario commentare le linee che impostano modtime e stamparlo (ma non commentare la riga che imposta moddate).

Il ritorno di questo in una sorgente Python sarebbe un po 'più difficile, anche se teoricamente possibile. Presumo che tutti questi programmi che funzionano con versioni precedenti di Python lo facciano.

83

Nel caso qualcuno è ancora alle prese con questo, come mi è stato tutta la mattina di oggi, ho trovato una soluzione che funziona per me:

Uncompyle

Istruzioni per l'installazione:

git clone https://github.com/gstarnberger/uncompyle.git 
cd uncompyle/ 
sudo ./setup.py install 

volta il programma è installato (nota: verrà installato nei pacchetti Python a livello di sistema, quindi dovrebbe essere nel tuo $PATH), puoi recuperare i tuoi file Python in questo modo:

uncompyler.py thank_goodness_this_still_exists.pyc > recovered_file.py 

Il decompilatore aggiunge un po 'di rumore per lo più sotto forma di commenti, tuttavia ho trovato che sia sorprendentemente pulito e fedele al mio codice originale. Dovrai rimuovere una piccola riga di testo che inizia con +++ vicino alla fine del file recuperato per poter eseguire il tuo codice.

+5

Salvato il mio bacon!Lo aggiungerò ai miei virtualenvs d'ora in poi ... – kaleissin

+5

Salvato anche il mio bacon. Ero così geniale che eseguivo rm * .py per pulire i miei file pyc prima di iniziare a fare il git. Ma almeno mi ha lasciato con i miei file .pyc in un bel po 'di ironia. – Eloff

+2

@Eloff Un file .gitignore contenente * .pyc sarebbe più semplice di dover essere consapevoli dell'eliminazione di * .pyc prima di ogni commit! Può darsi che tu lo sappia e che sia leggermente ossessivo per avere un ambiente pulito, come molti programmatori tendono ad essere: D – Milosz

26

decompyle ++ (pycdc) sembra funzionare per una serie di versioni di Python: https://github.com/zrax/pycdc

Ad esempio:

git clone https://github.com/zrax/pycdc 
cd pycdc 
make 
./bin/pycdc Example.pyc > Example.py 
+4

Vero salvavita, solo uno che ha funzionato per me. –

+2

devi eseguire 'cmake'. prima di eseguire make –

+0

La versione online di questo decompilatore è disponibile qui http://www.javadecompilers.com/pyc. Nessuna installazione necessaria. –

11

Ecco un ottimo strumento per decompilare i file pyc.

E 'stato codificato da me e supporta pitone 1,0-3,3

La sua base di uncompyle2 e decompyle ++

http://sourceforge.net/projects/easypythondecompiler/

+4

Sweet! Vale la pena menzionare, questo è quello per gli utenti di windows :) – tutuDajuju

+1

Il codice sorgente non è disponibile su SourceForge, quindi per il momento ignorerò questo strumento. – Bludzee

+0

Strumento molto utile! Decompilato il mio file Python 2.7 senza problemi con wine su Linux Mint – sly