Paquetes de Python y directorios de información de huevos

80

¿Alguien puede explicar cómo los directorios de información de huevos están vinculados a sus respectivos módulos? Por ejemplo, tengo lo siguiente:

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

Supongo que el directorio egg-info es para hacer que el módulo correspondiente sea visible para setuptools (easy_install), ¿verdad? Si es así, ¿cómo vincula setuptools el directorio egg-info con el directorio del módulo?

Suponiendo que estoy en el camino correcto, y por el bien del ejemplo ... Si quisiera hacer visible un paquete mío existente para setuptools, ¿podría simplemente vincular simbólicamente el directorio del módulo y el directorio egg-info al sitio? directorio de paquetes? Lo habría intentado yo mismo, pero no estoy seguro de cómo probar si el paquete es visible para setuptools. Puntos de bonificación si también puedes decirme cómo probar esto :)

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

Jeremy Cantrell
fuente
¿Todavía tienes un complemento quodlibet para Python por ahí? Eso suena muy cool.
Peter Turner
@PeterTurner Eso es probablemente quodlibet en sí mismo, está escrito en Python
Florian Brucker

Respuestas:

71

Los directorios .egg-info solo se crean si se usó --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 requireque puede usarse para solicitar una versión específica del paquete. Para importaciones regulares de "estilo antiguo", easy_install hackea un archivo .pth para colocar el directorio egg en sys.path. Para --single-version-external-managed, este pirateo no es necesario, porque solo habrá una única versión instalada (por la infraestructura de pacakging del sistema, por ejemplo, rpm o dpkg). Egg-info todavía se incluye, para aplicaciones que usan require(o cualquiera de los otros mecanismos de enlace pkg_resources).

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

Martin contra Löwis
fuente
26
Para revertir los efectos de setup.py develop, usesetup.py develop -u
codewarrior
Tenga en cuenta que es una minúscula -u. Las mayúsculas -Uhacen algo más.
CGFoX