Converti PYO in PY
Recupera codice sorgente Python leggibile da bytecode ottimizzato legacy di Python 2.
Come convertire pyo in py file
- Programmazione
- Ancora nessuna valutazione.
Un software Python 2 obsoleto può fornire solo un file .pyo quando un editor, un sistema di code review o un progetto di manutenzione richiede il codice sorgente .py leggibile. La conversione richiede la decompilazione perché un file PYO non contiene il testo sorgente originale.
Cos'è il formato PYO
Un file PYO è bytecode Python ottimizzato prodotto da Python 2 quando il codice viene eseguito con -O o -OO. Python 2 lo memorizzava comunemente accanto al sorgente come module.pyo; Python 3.5 e versioni successive hanno rimosso il formato PYO separato e memorizzano il bytecode ottimizzato come file .pyc contrassegnati.
È possibile trovare file PYO in applicazioni Python 2 archiviate, software per dispositivi integrati e vecchie directory di installazione contenenti file come __init__.pyo. PYO è bytecode compilato per l'interprete Python, non una copia compressa o rinominata del file .py originale.
Cos'è il formato PY
Un file PY è codice sorgente Python in testo normale che può essere aperto, modificato, cercato, sottoposto a versionamento ed eseguito con un interprete compatibile. È il formato previsto dagli editor di sorgenti, dai repository di codice, dai linter e dalla maggior parte degli strumenti di sviluppo.
La decompilazione può ricreare codice Python dall'aspetto eseguibile, ma normalmente non può ripristinare i commenti, gli spazi bianchi originali, i commenti sulla codifica del sorgente, la formattazione esatta o i costrutti del sorgente eliminati durante la compilazione. Molti nomi rimangono nel bytecode, ma non è garantito che corrispondano ai nomi scelti dall'autore.
Come convertire PYO in PY
- Identificare la versione del bytecode. Un'estensione
.pyoindica solitamente Python 2, ma il bytecode di Python 2.5, 2.6 e 2.7 è diverso. Utilizzare l'applicazione correlata, la relativa documentazione o uno strumento di ispezione del bytecode per determinare la versione dall'intestazione del file. Il decompilatore deve supportare tale versione. - Conservare l'originale. Lavorare su una copia ed evitare di eseguire un file PYO non attendibile. Se il file contiene codice proprietario, non caricarlo su un servizio di terze parti senza autorizzazione.
- Installare un decompilatore locale.
uncompyle6è un'opzione open-source comunemente utilizzata per il bytecode Python; installarlo in un ambiente isolato conpython -m pip install uncompyle6.pycdc, compilato dal relativo repository ufficiale, è un'altra opzione locale. Verificare le versioni del bytecode supportate da ciascun progetto prima di sceglierlo. - Eseguire il decompilatore. Ad esempio,
uncompyle6 -o recovered module.pyoscrive i file recuperati inrecovered. Alcune release o alcuni wrapper potrebbero rifiutare il suffisso.pyoanche se il file contiene bytecode Python 2 standard. In tal caso, copiarlo inmodule.pyce riprovare; la rinomina modifica solo il nome del file, non il bytecode. - Acquisire lo standard output quando necessario. Se lo strumento stampa il sorgente invece di creare un file, utilizzare
uncompyle6 module.pyo > module.py. Esaminare il risultato prima di sostituire qualsiasi sorgente esistente. - Convalidare con l'interprete corrispondente. Controllare innanzitutto l'output Python 2 con un interprete Python 2 adatto, ad esempio
python2 recovered/module.py, in un ambiente controllato. Correggere manualmente gli errori del decompilatore, quindi portare il codice a Python 3 con strumenti come2to3quando appropriato; il porting automatico non sostituisce i test.
Nessuna normale rinomina, estrazione di archivi o operazione di esportazione del testo converte PYO in codice sorgente. I convertitori online affidabili non sono generalmente una raccomandazione pratica per questo formato: il supporto dipende dall'esatta versione del bytecode Python e il caricamento di software proprietario espone il relativo codice. Un decompilatore locale è più sicuro e solitamente più affidabile.
Limiti di qualità e compatibilità
La decompilazione è un'approssimazione. Commenti, formattazione, sintassi esclusiva del sorgente e parte dell'organizzazione originale vanno persi. La compilazione Python 2 con -O rimuove le istruzioni assert; -OO rimuove anche le docstring. Il file recuperato può quindi differire nel comportamento o nella documentazione anche quando viene eseguito.
Controllare l'indentazione, la gestione delle eccezioni, i generatori, i decoratori, le codifiche delle stringhe, gli import e il flusso di controllo. Un decompilatore può produrre errori di sintassi o codice sottilmente errato quando non supporta completamente la versione del bytecode o un particolare costrutto del compilatore.
Un file PYO può inoltre dipendere da moduli di package, file di dati, estensioni native, variabili d'ambiente e da una directory di lavoro specifica. Una conversione riuscita produce testo sorgente, non un'applicazione sostitutiva autonoma.
Confronto formato: PYO vs PY
Come i formati PYO e PY si confrontano sulle proprietà più importanti per questa conversione.
| Proprietà | .PYO Python Optimized Bytecode | .PY Python source file |
|---|---|---|
| Leggibile come testo semplice | No | Sì |
| Formattazione del testo | Nessuno | Base |
| Immagini | No | No |
| Modifica successiva | Non modificabile direttamente | Facile |
| Si apre in un browser web | No | No |
| Dimensione tipica del file | Molto piccolo | Piccolo |
| Standard aperto | No | Sì |
| Ideale per | Incorporamento nelle applicazioni | Editing e post-produzione |
| Introdotto | — | 1991 |
| Sviluppatore | Python Software Foundation | Python Software Foundation |
| Tipo MIME | — | text/x-python |
Il database attualmente non contiene alcun convertitore di file pyo.