2008-11-02 19 views
68

¿Puede alguien explicar cómo los directorios egg-info están vinculados a sus respectivos módulos? Por ejemplo, he lo siguiente:Paquetes de Python y directorios info de huevos

/usr/local/lib/python2.5/site-packages/quodlibet/ 
/usr/local/lib/python2.5/site-packages/quodlibet-2.0.egg-info/ 

Asumo el directorio de huevo información es hacer que el módulo correspondiente visible para setuptools (easy_install), ¿verdad? Si es así, ¿cómo las herramientas de configuración vinculan el directorio egg-info al directorio del módulo?

Asumiendo que estoy en el camino correcto, y por el bien del ejemplo ... Si quisiera hacer un paquete existente mío visible para las herramientas de configuración, ¿podría unir simbólicamente el directorio del módulo y el directorio egg-info al directorio de paquetes de sitio? Lo hubiera intentado solo, pero no estoy seguro de cómo probar si el paquete está visible para las herramientas de configuración. Puntos de bonificación si también puede decirme cómo probar esto :)

La razón principal por la que trato de entender todo esto es porque me gustaría enlazar algunos de mis módulos en paquetes de sitio para poder hacer cambios. y tienen los cambios visibles a los scripts que los usan sin tener que volver a instalar el huevo de PyPI después de cada cambio.

+0

¿Todavía tienes un plugin quodlibet para Python dando vueltas por ahí? Eso suena muy cool. –

+0

@PeterTurner Probablemente sea quodlibet en sí mismo [está escrito en Python] (https://github.com/quodlibet/quodlibet) –

Respuesta

62

Los directorios .egg-info solo se crean si se utilizó --single-version-externally-managed para instalar el huevo. "Normalmente", la instalación de un huevo crearía un único directorio (o archivo zip), que contiene tanto el código como los metadatos.

pkg_resources (que es la biblioteca que lee los metadatos) tiene una función require que se puede usar para solicitar una versión específica del paquete. Para las importaciones regulares de "estilo antiguo", easy_install piratea un archivo .pth para obtener el directorio egg en sys.path. Para -single-version-externally-managed, esta piratería no es necesaria, porque solo habrá una única versión instalada (por la infraestructura de pacaging del sistema, por ejemplo, rpm o dpkg). La información de huevo todavía está incluida, para aplicaciones que usan require (o cualquiera de los otros mecanismos de enlace de pkg_resources).

Si desea instalar un paquete mediante enlaces duros, le recomiendo usar "setup.py develop". Este es un comando de setuptools que en realidad no instala el huevo, pero lo hace disponible para todo el sitio. Para hacerlo, crea un archivo de enlace de huevo para que pkg_resources lo pueda encontrar, y manipula un archivo .pth, para que la importación regular pueda encontrarlo.

+22

Para invertir los efectos de 'setup.py develop', use' setup.py develop -u' – codewarrior

Cuestiones relacionadas