Pacchetti Python e directory egg-info
-
05-07-2019 - |
Domanda
Qualcuno può spiegare come le directory egg-info sono legate ai rispettivi moduli? Ad esempio, ho il seguente:
/usr/local/lib/python2.5/site-packages/quodlibet/
/usr/local/lib/python2.5/site-packages/quodlibet-2.0.egg-info/
Suppongo che la directory egg-info sia per rendere visibile il modulo corrispondente a setuptools (easy_install), giusto? In tal caso, in che modo setuptools collega la directory egg-info alla directory del modulo?
Supponendo che io sia sulla buona strada, e per il bene di esempio ... Se volessi rendere un mio pacchetto esistente visibile a setuptools, potrei semplicemente collegare simbolicamente la directory del modulo e la directory egg-info a la directory dei pacchetti del sito? Lo avrei provato da solo, ma non sono sicuro di come testare se il pacchetto è visibile a setuptools. Punti bonus se puoi anche dirmi come testarlo :)
Il motivo principale per cui sto cercando di capire tutto questo è perché vorrei collegare in modo sintetico alcuni dei miei moduli in pacchetti del sito in modo da poter apportare modifiche ad essi e renderli visibili agli script che li usano senza dover per reinstallare l'uovo da PyPI dopo ogni modifica.
Soluzione
Le directory .egg-info vengono create solo se per installare l'uovo è stato usato --single-version-Externally-Managed. "Normalmente", l'installazione di un uovo creerebbe una singola directory (o file zip), contenente sia il codice che i metadati.
pkg_resources (che è la libreria che legge i metadati) ha una funzione richiedono
che può essere usata per richiedere una versione specifica del pacchetto. Per le importazioni regolari di "vecchio stile", easy_install modifica un file .pth per ottenere la directory egg su sys.path. Per --single-versione-gestita esternamente, questo hacking non è necessario, perché ci sarà una sola versione installata (dall'infrastruttura di pacakging del sistema, ad esempio rpm o dpkg). Le informazioni sull'uovo sono ancora incluse, per le applicazioni che usano richiedono
(o uno qualsiasi degli altri meccanismi di associazione pkg_resources).
Se vuoi installare un pacchetto tramite hard link, ti ??consiglio di usare " setup.py sviluppare " ;. Questo è un comando da setuptools che non installa effettivamente l'uovo, ma lo rende disponibile in tutto il sito. Per fare ciò, crea un file egg-link in modo che pkg_resources possa trovarlo e manipola un file .pth, in modo che possa essere trovato da una normale importazione.