Converti pyo in py

Converti PYO in PY

Recupera codice sorgente Python leggibile da bytecode ottimizzato legacy di Python 2.

Come convertire pyo in py file

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

  1. Identificare la versione del bytecode. Un'estensione .pyo indica 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.
  2. 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.
  3. Installare un decompilatore locale. uncompyle6 è un'opzione open-source comunemente utilizzata per il bytecode Python; installarlo in un ambiente isolato con python -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.
  4. Eseguire il decompilatore. Ad esempio, uncompyle6 -o recovered module.pyo scrive i file recuperati in recovered. Alcune release o alcuni wrapper potrebbero rifiutare il suffisso .pyo anche se il file contiene bytecode Python 2 standard. In tal caso, copiarlo in module.pyc e riprovare; la rinomina modifica solo il nome del file, non il bytecode.
  5. 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.
  6. 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 come 2to3 quando 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.

Confronto dei formati PYO e PY
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.

Conversione inversa

Conversione in .py
da altri formati

Condividi sui social media: