Python: ¿Por qué algunos paquetes se instalan como eggs y otros como "egg folders"?


Mantengo algunos paquetes de Python. Tengo un archivo setup.py muy similar para cada uno de ellos. Sin embargo, al hacer setup.py install, uno de mis paquetes se instala como un huevo, mientras que los otros se instalan como "carpetas de huevo", es decir, carpetas con una extensión de "huevo".

¿Cuál es la diferencia entre ellos que causa este comportamiento diferente?

Author: Chris Martin, 2010-05-09

2 answers

La Estructura Interna de Python Eggs, Zip Soporta Metadatos :

Si existe zip-safe, significa que el proyecto funcionará correctamente cuando se instale como un zipfile .egg, y a la inversa la existencia de not-zip-safe significa que el proyecto no debe instalarse como un archivo .egg [ie. como un directorio .egg. La opción zip_safe para setuptools' setup() determina qué archivo se escribirá. Si la opción no se proporciona, setuptools intenta hacer su propia evaluación de si el el paquete puede funcionar, basado en el código y el análisis de contenido.

 23
Author: ax.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-09 17:29:04

Un solo archivo egg es de hecho un archivo zip con una estructura de directorios particular dentro. Por la documentación zipimport , solo .py, .pyc, y los archivos .pyo se pueden importar desde archivos zip. Por lo tanto, si el paquete necesita importar otros tipos de recursos de módulo (como código c compilado; archivos .so, archivos .pyd) no funcionará como un archivo zip.

No se si esta es la única razón por la que algunos huevos no funcionarán como archivos zip, pero creo que es la razón principal.

 4
Author: Matt Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-09 17:43:07