Pakiety Pythona i katalogi egg-info

80

Czy ktoś może wyjaśnić, w jaki sposób katalogi egg-info są powiązane z odpowiednimi modułami? Na przykład mam:

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

Zakładam, że katalog egg-info ma sprawić, że odpowiedni moduł będzie widoczny dla setuptools (easy_install), prawda? Jeśli tak, w jaki sposób setuptools wiąże katalog egg-info z katalogiem modułów?

Zakładając, że jestem na dobrej drodze, i dla przykładu ... Gdybym chciał, aby mój istniejący pakiet był widoczny dla setuptools, czy mógłbym po prostu połączyć symbolicznie katalog modułu i katalog egg-info do witryny- katalog pakietów? Właśnie bym tego spróbował, ale nie jestem pewien, jak sprawdzić, czy pakiet jest widoczny dla setuptools. Dodatkowe punkty, jeśli możesz mi powiedzieć, jak to sprawdzić :)

Głównym powodem, dla którego próbuję to wszystko zrozumieć, jest to, że chciałbym dowiązać symboliczne niektóre z moich modułów do pakietów witryn, aby móc wprowadzać w nich zmiany i mieć je widoczne dla skryptów, które ich używają, bez konieczności ponownego instalowania jajko z PyPI po każdej zmianie.

Jeremy Cantrell
źródło
Czy nadal masz gdzieś kręcącą się wtyczkę quodlibet do Pythona? To brzmi naprawdę fajnie.
Peter Turner
@PeterTurner To prawdopodobnie sam quodlibet - jest napisany w Pythonie
Florian Brucker

Odpowiedzi:

71

Katalogi .egg-info są tworzone tylko wtedy, gdy do zainstalowania jajka użyto --single-version-externally-managed. „Zwykle” zainstalowanie jajka spowodowałoby utworzenie pojedynczego katalogu (lub pliku ZIP) zawierającego zarówno kod, jak i metadane.

pkg_resources (czyli biblioteka odczytująca metadane) ma funkcję, requirektórej można użyć do zażądania określonej wersji pakietu. W przypadku regularnych importów w starym stylu easy_install hakuje plik .pth, aby przenieść katalog egg do sys.path. W przypadku --single-version-zarządzanej zewnętrznie, to hakowanie nie jest konieczne, ponieważ będzie zainstalowana tylko jedna wersja (przez infrastrukturę pakującą systemu, np. Rpm lub dpkg). Informacje o jajku są nadal dołączane dla aplikacji, które używają require(lub dowolnego innego mechanizmu wiązania pkg_resources).

Jeśli chcesz zainstalować pakiet przez hard-linking, polecam użycie "setup.py develop". To jest polecenie z setuptools, które w rzeczywistości nie instaluje jajka, ale udostępnia je w całej witrynie. Aby to zrobić, tworzy plik z linkami do jajka, aby pkg_resources mógł go znaleźć, i manipuluje plikiem .pth, aby mógł go znaleźć zwykły import.

Martin przeciwko Löwis
źródło
27
Aby odwrócić skutki setup.py develop, użyjsetup.py develop -u
codewarrior
Zauważ, że jest to mała litera -u. Wielkie litery -Urobią coś innego.
CGFoX