Cosa significano queste estensioni di file Python?
- .pyc
- .pyd
- .pyo
Quali sono le differenze tra loro e come vengono generati da un file * .py?
Cosa significano queste estensioni di file Python?
Quali sono le differenze tra loro e come vengono generati da un file * .py?
Risposte:
.py
: Questo è normalmente il codice sorgente di input che hai scritto..pyc
: Questo è il bytecode compilato. Se importi un modulo, python costruirà un *.pyc
file che contiene il bytecode per renderlo più facile in seguito (e più veloce)..pyo
: Si trattava di un formato di file utilizzato prima di Python 3.5 per i *.pyc
file creati con -O
flag optimizes ( ). (vedi la nota sotto).pyd
: Questo è fondamentalmente un file dll di Windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dllAnche per ulteriori discussioni su .pyc
vs .pyo
, dai un'occhiata a: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (ho copiato la parte importante di seguito)
- Quando l'interprete Python viene invocato con il flag -O, il codice ottimizzato viene generato e memorizzato in file '.pyo'. L'ottimizzatore attualmente non aiuta molto; rimuove solo le dichiarazioni di asserzione. Quando si utilizza -O, tutto il bytecode è ottimizzato; I file .pyc vengono ignorati e i file .py vengono compilati in bytecode ottimizzato.
- Il passaggio di due flag -O all'interprete Python (-OO) farà sì che il compilatore bytecode esegua ottimizzazioni che in alcuni rari casi potrebbero causare malfunzionamenti dei programmi. Attualmente solo le
__doc__
stringhe vengono rimosse dal bytecode, risultando in file ".pyo" più compatti. Poiché alcuni programmi possono fare affidamento sulla disponibilità di questi, è consigliabile utilizzare questa opzione solo se si sa cosa si sta facendo.- Un programma non funziona più velocemente quando viene letto da un file '.pyc' o '.pyo' rispetto a quando viene letto da un file '.py'; l'unica cosa che è più veloce sui file '.pyc' o '.pyo' è la velocità con cui vengono caricati.
- Quando uno script viene eseguito specificando il suo nome nella riga di comando, il bytecode per lo script non viene mai scritto in un file '.pyc' o '.pyo'. Pertanto, il tempo di avvio di uno script può essere ridotto spostando la maggior parte del suo codice in un modulo e avendo un piccolo script bootstrap che importa quel modulo. È anche possibile nominare un file '.pyc' o '.pyo' direttamente dalla riga di comando.
Nota:
Il 15/09/2015 la versione 3.5 di Python ha implementato PEP-488 ed eliminato i .pyo
file. Ciò significa che i .pyc
file rappresentano un bytecode sia non ottimizzato che ottimizzato.
def f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000));
.pyo
file. Anche il bytecode ottimizzato termina quindi con l' .pyc
estensione Python 3.5.
sys.path
. Vedi site
moduloUn elenco più ampio di estensioni di file Python aggiuntive (per lo più rare e non ufficiali) è disponibile all'indirizzo http://dcjtech.info/topic/python-file-extensions/
.pth
file.