Vai al contenuto

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

È 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

  1. 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.
  2. Identificare la versione di Python che ha creato il file. Un nome come module.cpython-311.pyc identifica 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.
  3. 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.

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

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.

Conversione inversa

Conversione in .py
da altri formati

Condividi sui social media:

Già scaricato

Questo file è già stato scaricato. Per tutelare la tua privacy lo abbiamo eliminato dal nostro server subito dopo il download, quindi non può essere scaricato di nuovo. Se ti serve ancora, converti di nuovo il file.