2008-11-02 5 views
68

Quelqu'un peut-il expliquer comment les répertoires egg-info sont liés à leurs modules respectifs? Par exemple, je donne les résultats suivants: annuairePackages Python et répertoires egg-info

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

Je présume que la-info d'œufs est de rendre le module correspondant visible setuptools (easy_install), non? Si oui, comment setuptools lie le répertoire egg-info au répertoire du module?

En supposant que je suis sur la bonne voie, et pour l'exemple ... Si je voulais rendre un paquet existant de mien visible à setuptools, pourrais-je simplement symlink le répertoire du module et le répertoire egg-info dans le répertoire site-packages? J'aurais juste essayé moi-même, mais je ne sais pas comment tester si le paquet est visible pour setuptools. Les points bonus si vous pouvez aussi me dire comment tester ceci :)

La raison principale pour laquelle j'essaie de comprendre tout cela est que je voudrais créer un lien symbolique entre certains de mes modules dans des paquets de sites pour pouvoir apporter des modifications à eux et avoir les changements visibles aux scripts qui les utilisent sans avoir à réinstaller l'œuf de PyPI après chaque changement.

+0

Avez-vous encore un plugin quodlibet pour python qui traîne quelque part? Cela a l'air vraiment cool. –

+0

@PeterTurner C'est probablement quodlibet lui-même - [c'est écrit en Python] (https://github.com/quodlibet/quodlibet) –

Répondre

62

Les répertoires .egg-info ne sont créés que si --single-version-external-managed a été utilisé pour installer l'oeuf. "Normalement", l'installation d'un oeuf 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 "old-style", easy_install pirate un fichier .pth pour obtenir le répertoire egg sur sys.path. Pour une version unique gérée en externe, ce piratage n'est pas nécessaire, car il n'y aura qu'une seule version installée (par l'infrastructure d'activation du système, par exemple rpm ou dpkg). L'info-bulle est toujours incluse, pour les applications qui utilisent require (ou l'un des autres mécanismes de liaison pkg_resources).

Si vous voulez installer un paquet par liaison, je recommande d'utiliser "setup.py develop". C'est 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 oeuf-lien de sorte que pkg_resources peut le trouver, et il manipule un fichier .pth, de sorte que l'importation régulière peut le trouver.

+22

Pour inverser les effets de 'setup.py develop', utilisez' setup.py develop -u' – codewarrior

Questions connexes