Converti PYC in PY
Recupera codice sorgente Python leggibile dal bytecode utilizzando decompilers compatibili con la versione.
Crea file PY online
Non sappiamo ancora leggere i file PYC, quindi questa conversione non è disponibile. Se puoi esportare il tuo lavoro in uno di questi formati, ne ricaviamo un PY:
Vuoi convertire PYC in PY?
Faccelo sapere. Scegliamo le prossime conversioni da aggiungere in base all'interesse.
Come convertire pyc in py file
- Programmazione
- Ancora nessuna valutazione.
È necessario un file PY quando un programma, uno sviluppatore o un archivio contiene solo un modulo Python compilato, ma il relativo codice sorgente deve essere ispezionato o modificato. Si tratta di decompilazione, non di una conversione di formato senza perdita, quindi il codice recuperato potrebbe non corrispondere all'originale.
Che cos'è il formato PYC
I file PYC contengono bytecode Python e un oggetto codice serializzato per l'esecuzione da parte di un interprete Python. Python li crea comunemente durante l'importazione o la compilazione di un file PY, inserendoli in __pycache__ con nomi come module.cpython-311.pyc. I pacchetti installati, le distribuzioni di applicazioni e i software inclusi in bundle possono contenere file PYC senza il codice sorgente corrispondente.
Un file PYC contiene un'intestazione con i metadati dell'interprete e della cache, seguita da dati bytecode marshalizzati. Normalmente non conserva commenti, spaziatura originale, virgolette, formattazione o l'organizzazione esatta del codice sorgente. Molti identificatori rimangono nell'oggetto codice, ma l'ottimizzazione, l'offuscamento, il codice generato e i dettagli della compilazione possono rimuovere o modificare alcune informazioni.
Che cos'è il formato PY
PY è un file di codice sorgente Python in testo semplice, destinato alla lettura e alla modifica. Gli interpreti Python, gli IDE, i linter, i formatter, i sistemi di controllo versione e gli strumenti di packaging lavorano direttamente con i file PY. A differenza dell'output ricostruito, un file PY originale conserva i commenti dello sviluppatore, la formattazione, l'organizzazione del codice sorgente e, generalmente, tutte le intenzioni a livello di codice sorgente.
Rinominare un file PYC in .py non lo converte: il risultato è ancora bytecode binario e non è codice sorgente Python valido.
Come decompilare un file PYC
- Creare una copia del file PYC e lavorare su quella copia. Non eseguire un PYC non attendibile né uno script ricostruito; quando il file non è attendibile, i decompiler e le importazioni Python devono essere eseguiti in un ambiente isolato.
- Identificare la versione di Python che ha creato il file. Un nome come
module.cpython-311.pycidentifica CPython 3.11, ma un nome di file indipendente potrebbe non contenere queste informazioni. Il pacchetto che lo ha prodotto, l'intestazione PYC o il numero magico del bytecode possono fornire ulteriori indicazioni. - Installare un decompiler il cui supporto documentato includa quella versione del bytecode. Ad esempio:
python -m pip install decompyle3
decompyle3 -o recovered path/to/module.pyc
La directory di output dovrebbe contenere i file di codice sorgente ricostruiti. Se il comando installato non è disponibile nel percorso di sistema, eseguire l'eseguibile dalla directory degli script dell'ambiente.
Per una versione supportata diversa, provare uncompyle6:
python -m pip install uncompyle6
uncompyle6 -o recovered path/to/module.pyc
decompyle3 e uncompyle6 supportano intervalli specifici di bytecode Python anziché ogni versione attuale, quindi è necessario consultare la documentazione sulla compatibilità di ciascun progetto prima di scegliere tra i due. pycdc è un'altra opzione locale quando la sua versione supporta quella del bytecode del file:
pycdc path/to/module.pyc > recovered.py
I servizi online come PyLingual possono essere utili per file non riservati quando il supporto pubblicato include la versione Python del PYC. Il caricamento del bytecode invia codice potenzialmente proprietario a terzi e può essere soggetto a limiti di dimensione, conservazione o elaborazione; per il software riservato, utilizzare uno strumento locale e verificare l'output scaricato prima di aprirlo o eseguirlo.
Verificare e correggere il codice sorgente recuperato
Aprire il file .py generato in un editor e controllare la sintassi, le importazioni, la gestione delle eccezioni, i generatori, le comprensioni, i decorator, le closure e il codice generato dinamicamente. Compilarlo con l'interprete previsto:
python -m py_compile recovered.py
Una compilazione completata correttamente verifica solo la sintassi. Eseguire i test pertinenti e confrontare il comportamento con quello dell'applicazione originale prima di utilizzare il risultato come codice sorgente sostitutivo. Un decompiler può produrre codice dall'aspetto valido con un flusso di controllo errato o con dettagli mancanti.
Compatibilità e limiti del recupero
Il bytecode è strettamente legato alle implementazioni e alle versioni di Python. Un PYC creato da Python 3.11 o 3.12 potrebbe non funzionare con un decompiler che supporta solo bytecode meno recenti; i file PYC di Python 2 generalmente richiedono strumenti compatibili con Python 2. Un file danneggiato, troncato, ottimizzato, offuscato o modificato può produrre un output incompleto o non produrre alcun risultato.
La decompilazione non può ripristinare commenti, formattazione originale, moduli esterni non disponibili, dati del pacchetto o file sorgente a cui fa riferimento il codice. I moduli di estensione nativi non sono file PYC Python e richiedono metodi di recupero diversi. Il file PY originale, il repository del controllo versione, l'archivio di distribuzione, il backup o il codice sorgente del pacchetto sono gli unici modi affidabili per ottenere il codice sorgente esatto.
Confronto formato: PYC vs PY
Come i formati PYC e PY si confrontano sulle proprietà più importanti per questa conversione.
| Proprietà | .PYC Python compiled 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 | Sì | Sì |
| Ideale per | Incorporamento nelle applicazioni | Editing e post-produzione |
| Introdotto | 1991 | 1991 |
| Sviluppatore | Python Software Foundation | Python Software Foundation |
| Tipo MIME | — | text/x-python |
Le informazioni su estensioni e tipi di file sono fornite da File-Extensions.org
Software e collegamenti suggeriti: convertitori da pyc a py
Domande frequenti
È possibile convertire un file .pyc di nuovo in un file .py?
A volte un file .pyc può essere decompilato in un codice sorgente .py approssimativo, ma di solito non può essere ripristinato esattamente. I commenti originali, la formattazione e alcuni dettagli a livello di codice sorgente normalmente vengono persi durante la compilazione.
Il codice .py recuperato sarà identico all'originale?
No, il codice .py recuperato è solitamente una ricostruzione del bytecode compilato, non il codice sorgente originale. I nomi e la struttura del programma possono essere parzialmente preservati, ma commenti, spaziatura, alcune espressioni e altri dettagli del codice sorgente possono essere diversi o mancanti.
Perché la conversione da .pyc a .py non riesce per alcuni file Python?
Spesso non riesce quando la versione del bytecode non corrisponde a quella del decompilatore o quando il file è stato ottimizzato, offuscato, danneggiato o prodotto da un'implementazione Python diversa. Un file .pyc può inoltre contenere solo il codice compilato di un modulo, quindi non può ripristinare file sorgente o la struttura del progetto che non erano mai inclusi.
Posso eseguire il file .py risultante esattamente come l'originale?
Spesso, ma non sempre; potrebbe essere necessario correggere manualmente il codice recuperato prima di eseguirlo. Il bytecode specifico della versione di Python, i file esterni mancanti e i dettagli del codice sorgente andati persi possono causare errori di sintassi o modificare il comportamento.