¿Qué significan las extensiones de archivo python, .pyc .pyd .pyo?

436

¿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?

Yanki Twizzy
fuente

Respuestas:

481
  1. .py: Este es normalmente el código fuente de entrada que ha escrito.
  2. .pyc: Este es el bytecode compilado. Si importa un módulo, python creará un *.pycarchivo que contiene el bytecode para que importarlo nuevamente sea más fácil (y más rápido).
  3. .pyo: Este era un formato de archivo utilizado antes de Python 3.5 para *.pycarchivos que se crearon con optimizaciones ( -O). (ver la nota a continuación)
  4. .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-dll

También para más discusión sobre .pycvs .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ó .pyoarchivos. Esto significa que los .pycarchivos representan códigos de bytes optimizados y no optimizados.

Bill Lynch
fuente
2
¿Los archivos dll se generan a partir de scripts de python o scripts de c / c ++?
Yanki Twizzy
1
@yankitwizzy: Sí. Deben generarse a partir del código C / C ++. El archivo debe estar en código de máquina, por lo que no puede ser directamente desde Python.
Bill Lynch el
"El optimizador actualmente no ayuda mucho; solo elimina las declaraciones de afirmación". ¿Estas seguro acerca de esto? Pruebadef 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: ¿Estoy seguro de qué? ¿Podría explicar lo que cree que muestra su ejemplo en lugar de simplemente lanzar código en un comentario?
Bill Lynch
99
Tenga en cuenta que en Python 3.5 , se implementa PEP 488 , lo que elimina el concepto de .pyoarchivos. Incluso el bytecode optimizado termina con la .pycextensión Python 3.5, entonces.
Michael Currie
229
  • .py - Script regular
  • .py3 : script Python3 (poco utilizado). Los scripts de Python3 generalmente terminan con ".py" no ".py3", pero lo he visto algunas veces
  • .pyc - secuencia de comandos compilada (Bytecode)
  • .pyo : archivo pyc optimizado (a partir de Python3.5, Python solo usará pyc en lugar de pyo y pyc)
  • .pyw : secuencia de comandos de Python para ejecutarse en modo de ventana, sin consola; ejecutado con pythonw.exe
  • .pyx - Cython src para convertir a C / C ++
  • .pyd : secuencia de comandos de Python hecha como una DLL de Windows
  • .pxd : secuencia de comandos de Cython que es equivalente a un encabezado C / C ++
  • .pxi : trozo de MyPy
  • .pyi : archivo de resguardo ( PEP 484 )
  • .pyz : archivo de script Python ( PEP 441 ); Este es un script que contiene scripts Python comprimidos (ZIP) en forma binaria después del encabezado del script Python estándar
  • .pywz : archivo de script Python para MS-Windows ( PEP 441 ); Este es un script que contiene scripts Python comprimidos (ZIP) en forma binaria después del encabezado del script Python estándar
  • .py [cod] - notación comodín en ".gitignore" que significa que el archivo puede ser ".pyc", ".pyo" o ".pyd".
  • .pth : un archivo de configuración de ruta; su contenido son elementos adicionales (uno por línea) para agregar sys.path. Ver sitemódulo

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

Devyn Collier Johnson
fuente
11
Cabe señalar que un archivo «.pyx» no es exactamente la fuente de Python que se convierte a C, sino más bien el código fuente de Cython (es decir, esperando ser convertido a C)
Fred Osterrath
¿Qué representa "I" en la extensión PYI? "Incluir" / "Implementación" / "Interfaz"?
ChrisFreeman
1
.pyw significa script PYthon que crea una ventana, no Python 4 Windows. .pyw puede ejecutarse bajo * nix
Kotauskas
1
En general .pyw es un script que se ejecuta en modo ventana, es decir, sin salida de consola. Como @VladislavToncharov afirma que se pueden ejecutar en la mayoría de las plataformas que admiten Python si está instalado .
Steve Barnes
1
Esta respuesta debería discutir los .ptharchivos.
wim