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 *.pycfile 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 *.pycfile creati con -Oflag 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 .pycvs .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 .pyofile. Ciò significa che i .pycfile 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));
.pyofile. Anche il bytecode ottimizzato termina quindi con l' .pycestensione Python 3.5.
sys.path. Vedi sitemoduloUn 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/
.pthfile.