vantaggi:
Primo: offuscamento lieve e trattabile.
Secondo: se la compilazione risulta in un file significativamente più piccolo, otterrai tempi di caricamento più rapidi. Bello per il web.
Terzo: Python può saltare il passaggio della compilazione. Più veloce al carico iniziale. Bello per la CPU e il web.
Quarto: più commenterai, più piccolo sarà il file .pyco .pyorispetto al .pyfile sorgente .
Quinto: un utente finale con solo un file .pyco .pyoin mano ha molte meno probabilità di presentarti un bug causato da una modifica non ripristinata di cui ha dimenticato di parlarti.
Sesto: se stai mirando a un sistema incorporato, ottenere un file di dimensioni inferiori da incorporare può rappresentare un vantaggio significativo e l'architettura è stabile, quindi uno svantaggio, descritto di seguito, non entra in gioco.
Compilazione di alto livello
È utile sapere che è possibile compilare un file sorgente Python di livello superiore in un .pycfile in questo modo:
python -m py_compile myscript.py
Questo rimuove i commenti. Lascia docstringsintatto. Se anche tu vuoi sbarazzartene docstrings(potresti pensare seriamente al perché lo stai facendo), compila invece in questo modo ...
python -OO -m py_compile myscript.py
... e otterrai un .pyofile anziché un .pycfile; equamente distribuibile in termini di funzionalità essenziale del codice, ma più piccolo per le dimensioni dello stripped-out docstrings(e meno facilmente comprensibile per il successivo impiego se fosse decente docstringsin primo luogo). Ma vedi lo svantaggio tre, di seguito.
Nota che python usa la .pydata del file, se presente, per decidere se deve eseguire il .pyfile invece del file .pyco .pyo--- quindi modifica il tuo file .py, e .pyco .pyoè obsoleto e tutti i vantaggi che hai ottenuto sono persi. È necessario ricompilare al fine di ottenere il .pyco .pyobenefici di nuovo ancora una volta, ad esempio in quanto potrebbero essere.
svantaggi:
Primo: c'è un "cookie magico" .pyce .pyofile che indicano l'architettura di sistema in cui è stato compilato il file python. Se distribuisci uno di questi file in un ambiente di tipo diverso, si romperà. Se si distribuisce il .pyco .pyosenza il associato .pyda ricompilare o touchcosì sostituisce il .pyco .pyo, l'utente finale non può ripararlo neanche.
Secondo: se docstringssi salta l'uso -OOdell'opzione della riga di comando come descritto sopra, nessuno sarà in grado di ottenere tali informazioni, il che può rendere il codice più difficile (o impossibile).
Terzo: l' -OOopzione di Python implementa anche alcune ottimizzazioni secondo l' -Oopzione della riga di comando; ciò può comportare cambiamenti nel funzionamento. Le ottimizzazioni note sono:
sys.flags.optimize = 1
assert le dichiarazioni vengono saltate
__debug__ = Falso
Quarto: se hai intenzionalmente reso eseguibile il tuo script Python con qualcosa nell'ordine di #!/usr/bin/pythonsulla prima riga, questo viene eliminato .pyce .pyofile e tale funzionalità viene persa.
Quinto: in qualche modo ovvio, ma se compili il tuo codice, non solo può essere influenzato dal suo uso, ma il potenziale per gli altri di imparare dal tuo lavoro è ridotto, spesso in modo grave.