Che cos'è il formato di file PYO?
Un file .pyo è un file di bytecode ottimizzato Python legacy prodotto dall'interprete CPython quando viene eseguito con il flag -O (ottimizza) o -OO. Passando -O vengono rimosse le istruzioni assert dal bytecode compilato; passando -OO vengono rimosse inoltre tutte le docstring, riducendo leggermente le dimensioni del file.
Internamente, i file .pyo sono identici byte per byte nel formato ai file .pyc: un'intestazione di 16 byte (numero magico specifico della versione di 4 byte, campo flag di 4 byte, timestamp o hash sorgente di 4 byte, dimensione sorgente di 4 byte) seguita da un oggetto codice CPython serializzato (marshalled). Il livello di ottimizzazione si riflette solo nel contenuto compilato - mai nell'intestazione del file.
L'estensione .pyo è stata deprecata in Python 3.5 dalla PEP 488 (settembre 2015) e non viene più generata da alcuna versione corrente di Python. Da Python 3.5 in poi, il bytecode ottimizzato viene memorizzato all'interno di __pycache__ con nomi come module.cpython-311.opt-1.pyc (per -O) o .opt-2.pyc (per -OO). Se incontri un file .pyo oggi, esso ha origine da codice Python 2 o Python 3.0-3.4.
I file .pyo non sono portabili tra le versioni di CPython - il numero magico cambia con ogni rilascio. Strumenti come uncompyle6 (Python 2-3.8) e decompyle3 (Python 3.7-3.11) possono decompilare i file .pyo riportandoli a un codice sorgente .py approssimativo, sebbene l'accuratezza vari in base alla versione di Python e alla complessità del codice.
Sicurezza e incolumità
RISCHIO: MEDIUMUn file .pyo viene eseguito come bytecode Python con tutte le capacità di uno script Python - accesso al file system, rete, esecuzione di sottoprocessi. Non eseguire mai un .pyo da una fonte non attendibile. I software antivirus spesso non scansionano il contenuto dei .pyo. Le app Python malevole sono talvolta distribuite solo come bytecode (.pyc/.pyo) per rendere più difficile il reverse engineering, sebbene i decompilatori possano recuperare gran parte del sorgente.
Dettagli del formato
in sintesiProgrammi che aprono file PYO
Dettagli tecnici
specifiche approfondite| Relazione tra formati | Formato file identico byte per byte a `.pyc`; distinto solo dall'estensione del nome file e dal contenuto dell'ottimizzazione |
| Struttura intestazione | Intestazione di 16 byte: magic di versione a 4 byte + flag a 4 byte + mtime o hash sorgente a 4 byte + dimensione sorgente a 4 byte |
| Formato del corpo | Oggetto codice CPython serializzato (istruzioni bytecode, pool di costanti, nomi, nomi variabili, oggetti codice annidati) |
| Ordine dei byte | Little-endian (formato di serializzazione marshal di CPython) |
| Livello di ottimizzazione -O | Rimuove le istruzioni `assert` dal bytecode compilato |
| Livello di ottimizzazione -OO | Rimuove le istruzioni `assert` e tutte le docstring dal bytecode compilato |
| Deprecazione | Estensione `.pyo` eliminata in Python 3.5 (PEP 488, settembre 2015); non generata da alcuna versione corrente di Python |
| Equivalente moderno | `module.cpython-3X.opt-1.pyc` (livello 1) o `.opt-2.pyc` (livello 2) memorizzato in `__pycache__` |
| Portabilità della versione | Non portabile tra le versioni di CPython; il numero magico nei byte 0-3 cambia con ogni rilascio principale di CPython |
| Validazione dell'integrità | Python 3.7+ (PEP 552): SipHash opzionale del sorgente memorizzato nei flag dell'intestazione; Python 2 / primi 3: solo confronto mtime |
| Strumenti di decompilazione | `uncompyle6` (Python 2-3.8), `decompyle3` (Python 3.7-3.11) |
| Ambito legacy | Prodotto solo da Python 2 o Python 3.0-3.4; non riscontrato in progetti destinati a Python 3.5 o versioni successive |
| Rilasciato | Early CPython (1990s); same as .pyc but with optimizations (assert removal with -O; docstring removal with -OO) |
| Ultima versione | DEPRECATED in Python 3.5 (PEP 488, September 2015) - .pyo extension no longer generated; replaced by .cpython-3X.opt-1.pyc / .opt-2.pyc naming |
| Standard aperto | Sì · royalty-free |
| Specifica | peps.python.org |
Conversioni PYO
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file PYO.