web-dev-qa-db-fra.com

Python et répertoires Egg-info

Quelqu'un peut-il expliquer comment les répertoires Egg-info sont liés à leurs modules respectifs? Par exemple, j'ai les éléments suivants:

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

Je suppose que le répertoire Egg-info est de rendre le module correspondant visible pour setuptools (easy_install), non? Si oui, comment setuptools lie-t-il le répertoire Egg-info au répertoire du module?

En supposant que je suis sur la bonne voie, et à titre d'exemple ... Si je voulais rendre un de mes paquets existants visible pour setuptools, pourrais-je simplement créer un lien symbolique entre le répertoire du module et le répertoire Egg-info sur le site- répertoire des packages? J'aurais juste essayé cela moi-même, mais je ne sais pas comment tester si le paquet est visible pour setuptools. Des points bonus si vous pouvez aussi me dire comment tester ça :)

La principale raison pour laquelle j'essaie de comprendre tout cela est parce que je voudrais créer un lien symbolique entre certains de mes modules dans des packages de site afin que je puisse y apporter des modifications et que les modifications soient visibles pour les scripts qui les utilisent sans avoir à réinstaller le Oeuf de PyPI après chaque changement.

75
Jeremy Cantrell

Les répertoires .Egg-info ne sont créés que si --single-version-externally-managed a été utilisé pour installer Egg. "Normalement", l'installation d'un Egg créerait un seul répertoire (ou fichier Zip), contenant à la fois le code et les métadonnées.

pkg_resources (qui est la bibliothèque qui lit les métadonnées) a une fonction require qui peut être utilisée pour demander une version spécifique du paquet. Pour les importations régulières "à l'ancienne", easy_install pirate un fichier .pth pour obtenir le répertoire Egg sur sys.path. Pour --single-version-externally-managed, ce piratage n'est pas nécessaire, car il n'y aura qu'une seule version installée (par l'infrastructure de pacakging du système, par exemple rpm ou dpkg). Egg-info est toujours inclus, pour les applications qui utilisent require (ou l'un des autres mécanismes de liaison pkg_resources).

Si vous souhaitez installer un package par liaison physique, je recommande d'utiliser "setup.py develop". Il s'agit d'une commande de setuptools qui n'installe pas réellement l'oeuf, mais le rend disponible sur tout le site. Pour ce faire, il crée un fichier Egg-link afin que pkg_resources puisse le trouver, et il manipule un fichier .pth, afin qu'une importation régulière puisse le trouver.

69
Martin v. Löwis