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 .pyc
o .pyo
rispetto al .py
file sorgente .
Quinto: un utente finale con solo un file .pyc
o .pyo
in 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 .pyc
file in questo modo:
python -m py_compile myscript.py
Questo rimuove i commenti. Lascia docstrings
intatto. 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 .pyo
file anziché un .pyc
file; 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 docstrings
in primo luogo). Ma vedi lo svantaggio tre, di seguito.
Nota che python usa la .py
data del file, se presente, per decidere se deve eseguire il .py
file invece del file .pyc
o .pyo
--- quindi modifica il tuo file .py, e .pyc
o .pyo
è obsoleto e tutti i vantaggi che hai ottenuto sono persi. È necessario ricompilare al fine di ottenere il .pyc
o .pyo
benefici di nuovo ancora una volta, ad esempio in quanto potrebbero essere.
svantaggi:
Primo: c'è un "cookie magico" .pyc
e .pyo
file 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 .pyc
o .pyo
senza il associato .py
da ricompilare o touch
così sostituisce il .pyc
o .pyo
, l'utente finale non può ripararlo neanche.
Secondo: se docstrings
si salta l'uso -OO
dell'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' -OO
opzione di Python implementa anche alcune ottimizzazioni secondo l' -O
opzione 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/python
sulla prima riga, questo viene eliminato .pyc
e .pyo
file 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.