find_packages python packaging setuptools egg

find_packages - Python: ¿Por qué algunos paquetes se instalan como huevos y otros como "carpetas de huevos"?



setuptools find_packages (2)

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

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


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

No sé 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.


La estructura interna de los huevos de Python, metadatos de soporte Zip :

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