Cuando instalo un paquete de Deb de Python, digamos que python-numpy
los archivos son archivos Python simples. ¿Cómo le digo al administrador de paquetes que prefiero usar pyc o incluso mejor archivos pyo?
fuente
Cuando instalo un paquete de Deb de Python, digamos que python-numpy
los archivos son archivos Python simples. ¿Cómo le digo al administrador de paquetes que prefiero usar pyc o incluso mejor archivos pyo?
Las aplicaciones Python bien empaquetadas se están compilando en .pyc
archivos en una secuencia de comandos ejecutada después de la instalación de los archivos. Esto es necesario de acuerdo con las pautas de empaquetado para poder adoptar la instalación de Python que está utilizando en ese momento. Recuerde que los .pyc
archivos son muy específicos de su sistema (versión de Python y dependencias).
Por lo tanto, todos los archivos .pyo
y .pyc
están específicamente excluidos en paquetes y etiquetados como errores por Lintian :
Los archivos fuente compilados de Python no deben incluirse en el paquete. Estos archivos deben eliminarse del paquete y crearse en el momento de la instalación del paquete en la postinst.
Consulte la sección 2.6 de la Política de Debian Python ( Compilación de bytes de módulos ) para obtener más información.
Gravedad: grave, certeza: cierta
En el caso de python-numpy
esta compilación de bytes posterior a la instalación, se maneja el gancho debhelper de pycentral. Después de la instalación se ve así:
ls -l /usr/lib/python2.7/dist-packages/numpy
lrwxrwxrwx 1 root root 47 Mar 20 2012 add_newdocs.py -> ../../../../share/pyshared/numpy/add_newdocs.py
-rw-r--r-- 1 root root 251912 Aug 6 22:06 add_newdocs.pyc
La razón por la cual estos .pyc
/ .pyo
archivos no se compilan en tiempo de ejecución durante el primer inicio de la aplicación como esperaba es la siguiente.
Los archivos de Python se instalan en un directorio de todo el sistema, disponible para todos los usuarios del sistema. Cada vez que un usuario inicia la aplicación, el intérprete de Python puede leer los .py
archivos, pero no puede escribir en los directorios (por ejemplo /usr/lib/python2.7/dist-packages/
). Esto es parte de la seguridad general en todos los sistemas Linux; los usuarios no deberían escribir /usr
, solo con derechos de root esto debería ser posible. Por esta razón, los ganchos APT compilarán los archivos de Python por usted en el momento de la instalación; en primer lugar para minimizar el tamaño del paquete, en segundo lugar para poder volver a activar los ganchos una vez que algo cambie en su sistema con respecto a Python, porque se requiere volver a compilar cuando se vuelven incompatibles durante las actualizaciones, por ejemplo.
Sin embargo, esto no afectará a los archivos de Python propiedad del usuario que se compilan en tiempo de ejecución.
/usr/share/pyshared/
escribir para mí mismo, para permitir que Python compile archivos en la primera ejecución./usr/lib/python2.7/dist-packages/numpy
, haypyc
archivos. Recuerdo que busqué allí en varias instalaciones, y solo había archivos py simples. Así que más o menos "no puedo reproducir el error"..pyc
que todavía no estaría allí es que el paquete no se instaló por completo. Después de desempacar hay otros pasos a seguir. IIRC, el enlace central de python se ejecuta solo después de instalar todos los paquetes. Por lo tanto, en una sesión APT en ejecución o interrumpida que instala el paquete, la observación que describió se puede hacer probablemente.