Cosa significano le estensioni dei file python, .pyc .pyd .pyo?


436

Cosa significano queste estensioni di file Python?

  • .pyc
  • .pyd
  • .pyo

Quali sono le differenze tra loro e come vengono generati da un file * .py?

Risposte:


481
  1. .py: Questo è normalmente il codice sorgente di input che hai scritto.
  2. .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).
  3. .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)
  4. .pyd: Questo è fondamentalmente un file dll di Windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

Anche 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.


2
I file dll sono generati da script Python o script c / c ++?
Yanki Twizzy,

1
@yankitwizzy: Sì. Dovrebbero essere generati dal codice C / C ++. Il file deve essere nel codice macchina, quindi non può essere direttamente da Python.
Bill Lynch,

"Attualmente l'ottimizzatore non aiuta molto; rimuove solo le dichiarazioni di asserzione.". Sei sicuro di questo? Provadef 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));
Jorge Leitao,

@ JCLeitão: sono sicuro di cosa? Potresti spiegare cosa pensi che mostri il tuo esempio piuttosto che semplicemente lanciare il codice in un commento.
Bill Lynch,

9
Si noti che in Python 3.5 , PEP 488 è implementata, che elimina il concetto di .pyofile. Anche il bytecode ottimizzato termina quindi con l' .pycestensione Python 3.5.
Michael Currie,

229
  • .py - Script regolare
  • .py3 - (usato raramente) script Python3. Gli script Python3 di solito terminano con ".py" e non ".py3", ma l'ho visto alcune volte
  • .pyc - script compilato (Bytecode)
  • .pyo - file pyc ottimizzato (A partire da Python3.5, Python utilizzerà solo pyc anziché pyo e pyc)
  • .pyw - Script Python da eseguire in modalità Windowed, senza console; eseguito con pythonw.exe
  • .pyx - Cython src da convertire in C / C ++
  • .pyd - Script Python creato come una DLL di Windows
  • .pxd - Script Cython che equivale a un'intestazione C / C ++
  • .pxi - Stub MyPy
  • .pyi - File stub ( PEP 484 )
  • .pyz - Archivio script Python ( PEP 441 ); questo è uno script contenente script Python compressi (ZIP) in forma binaria dopo l'intestazione dello script Python standard
  • .pywz - Archivio script Python per MS-Windows ( PEP 441 ); questo è uno script contenente script Python compressi (ZIP) in forma binaria dopo l'intestazione dello script Python standard
  • .py [cod] - notazione jolly in ".gitignore" significa che il file può essere ".pyc", ".pyo" o ".pyd".
  • .pth - un file di configurazione del percorso; i suoi contenuti sono elementi aggiuntivi (uno per riga) da aggiungere sys.path. Vedi sitemodulo

Un 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/


11
Va notato che un file «.pyx» non è proprio un sorgente Python che viene convertito in C, ma piuttosto un codice sorgente Cython (cioè: in attesa di essere convertito in C)
Fred Osterrath,

Cosa rappresenta "I" nell'estensione PYI? "Includi" / "Implementazione" / "Interfaccia"?
ChrisFreeman,

1
.pyw significa script PYthon che crea una finestra, non Python 4 Windows. .pyw può essere eseguito sotto * nix
Kotauskas il

1
In generale .pyw è uno script da eseguire in modalità Finestra, ovvero senza un output console. Come afferma @VladislavToncharov, possono essere eseguiti sulla maggior parte delle piattaforme che supportano Python se installato .
Steve Barnes,

1
Questa risposta dovrebbe discutere dei .pthfile.
mercoledì
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.