2008-11-02 9 views
68

Kann jemand erklären, wie Ei-Info-Verzeichnisse an ihre jeweiligen Module gebunden sind? Zum Beispiel habe ich die folgenden:Python-Pakete und Ei-Info-Verzeichnisse

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

Ich gehe davon aus das Ei-Info-Verzeichnis ist das entsprechende Modul sichtbar Setuptools (easy_install) zu machen, nicht wahr? Wenn ja, wie binden setuptools das Verzeichnis "eginfo" an das Modulverzeichnis?

Angenommen, ich bin auf dem richtigen Weg, und als Beispiel ... Wenn ich ein vorhandenes Paket von mir zu setuptools sichtbar machen wollte, konnte ich nur das Modul-Verzeichnis und das Ei-Info-Verzeichnis symbolisch verknüpfen zum site-packages Verzeichnis? Ich hätte das gerade selbst ausprobiert, aber ich bin mir nicht sicher, wie ich testen soll, ob das Paket für setsetools sichtbar ist. Bonuspunkte, wenn Sie mir auch sagen können, wie man das testet :)

Der Hauptgrund, warum ich versuche, all dies zu verstehen, ist, weil ich einige meiner Module in Site-Pakete symlinking, so dass ich Änderungen vornehmen kann zu ihnen und die Änderungen sichtbar für die Skripte, die sie verwenden, ohne das Ei von PyPI nach jeder Änderung neu zu installieren.

+0

Haben Sie noch ein Quodlibet-Plugin für Python irgendwo herumhängen? Das klingt wirklich cool. –

+0

@PeterTurner Das ist wahrscheinlich Quodlibet selbst - [es ist in Python geschrieben] (https://github.com/quodlibet/quodlibet) –

Antwort

62

Die .egg-info-Verzeichnisse werden nur erstellt, wenn --single-version-extern-managed zur Installation des Eies verwendet wurde. "Normalerweise" würde die Installation eines Eies ein einzelnes Verzeichnis (oder eine Zip-Datei) erstellen, das sowohl den Code als auch die Metadaten enthält.

pkg_resources (das ist die Bibliothek, die die Metadaten liest) hat eine Funktion require, die verwendet werden kann, um eine bestimmte Version des Pakets anzufordern. Bei "alten", regulären Imports hackt easy_install eine .pth-Datei, um das ei-Verzeichnis auf sys.path zu bekommen. Für - eine einzelne Version - extern verwaltet, ist dieses Hacken nicht notwendig, da nur eine einzige Version installiert wird (durch die Pacakging-Infrastruktur des Systems, beispielsweise rpm oder dpkg). Die Ei-Info ist immer noch enthalten, für Anwendungen, die require (oder einen der anderen pkg_resources-Bindungsmechanismen) verwenden.

Wenn Sie ein Paket durch Hard-Linking installieren möchten, empfehle ich die Verwendung von "setup.py develop". Dies ist ein Befehl von setuptools, der das Ei nicht installiert, sondern es für die gesamte Site verfügbar macht. Um dies zu tun, erstellt es eine Ei-Link-Datei, so dass pkg_resources es finden kann, und es manipuliert eine .pth-Datei, so dass der reguläre Import sie finden kann.

+22

Um die Effekte von 'setup.py develop' umzukehren, verwenden Sie' setup.py develop -u' – codewarrior

Verwandte Themen