¿Qué significan estas extensiones de archivo de Python?
- .pyc
- .pyd
- .pyo
¿Cuáles son las diferencias entre ellos y cómo se generan a partir de un archivo * .py?
.py
: Este es normalmente el código fuente de entrada que ha escrito..pyc
: Este es el bytecode compilado. Si importa un módulo, python creará un *.pyc
archivo que contiene el bytecode para que importarlo nuevamente sea más fácil (y más rápido)..pyo
: Este era un formato de archivo utilizado antes de Python 3.5 para *.pyc
archivos que se crearon con optimizaciones ( -O
). (ver la nota a continuación).pyd
: Esto es básicamente un archivo dll de windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dllTambién para más discusión sobre .pyc
vs .pyo
, eche un vistazo a: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (he copiado la parte importante a continuación)
- Cuando se invoca al intérprete de Python con el indicador -O, se genera un código optimizado y se almacena en archivos '.pyo'. El optimizador actualmente no ayuda mucho; solo elimina declaraciones de afirmación. Cuando se usa -O, se optimiza todo el código de bytes; Los archivos .pyc se ignoran y los archivos .py se compilan a bytecode optimizado.
- Pasar dos banderas -O al intérprete de Python (-OO) hará que el compilador de bytecode realice optimizaciones que, en algunos casos, podrían ocasionar el mal funcionamiento de los programas. Actualmente, solo
__doc__
se eliminan las cadenas del código de bytes, lo que resulta en archivos '.pyo' más compactos. Dado que algunos programas pueden confiar en tenerlos disponibles, solo debe usar esta opción si sabe lo que está haciendo.- Un programa no se ejecuta más rápido cuando se lee desde un archivo '.pyc' o '.pyo' que cuando se lee desde un archivo '.py'; Lo único que es más rápido acerca de los archivos '.pyc' o '.pyo' es la velocidad con la que se cargan.
- Cuando se ejecuta un script dando su nombre en la línea de comando, el código de bytes para el script nunca se escribe en un archivo '.pyc' o '.pyo'. Por lo tanto, el tiempo de inicio de un script puede reducirse moviendo la mayor parte de su código a un módulo y teniendo un pequeño script de arranque que importe ese módulo. También es posible nombrar un archivo '.pyc' o '.pyo' directamente en la línea de comando.
Nota:
En 2015-09-15, la versión Python 3.5 implementó PEP-488 y eliminó .pyo
archivos. Esto significa que los .pyc
archivos representan códigos de bytes optimizados y no optimizados.
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
archivos. Incluso el bytecode optimizado termina con la.pyc
extensión Python 3.5, entonces.sys.path
. Versite
móduloPuede encontrar una lista más grande de extensiones de archivo Python adicionales (en su mayoría raras y no oficiales) en http://dcjtech.info/topic/python-file-extensions/
fuente
.pth
archivos.