Dlaczego # egg = foo podczas instalacji pip z repozytorium git

96

Kiedy wykonuję "pip install -e ...", aby zainstalować z repozytorium git, muszę podać # egg = somename lub pip narzeka. Na przykład:

pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app

Jakie jest znaczenie tego „jajek”?

Lorin Hochstein
źródło
1
Ta część pip installdokumentacji mówi o tym #egg=name, ale nie daje jasnej odpowiedzi.
Christian Long,

Odpowiedzi:

37

na pip install -h ciąg znaków „jajko” jest katalogiem, który jest pobierany podczas instalacji

Will Ayd
źródło
12
Czy może to być ta sama nazwa, co repozytorium? Czy sprawy mają znaczenie?
CMCDragonkai
14
„Katalog, który jest wyewidencjonowywany”? Więc mam wpisać nazwę oddziału? Zrobić coś?
Chris,
2
Jeśli utworzyłeś niestandardowy pakiet Pythona, po uruchomieniu setuptools katalog o nazwie project-name.egg-info/top_level.txtpowinien zostać utworzony. Użyj zawartości tego pliku jako wartości eggparametru.
dspacejs
2
Wydaje się, że nie wiem, czy to egg=...ustawienie ma znaczenie. Pakiet, który instaluję, ma wiele wpisów w pliku top_level.txt. Eksperymentowałem z dopasowaniem go do namekwarg, którego używa skrypt, setup.pyale także z dowolną wartością. Wyniki wydają się być takie same. Zwróć uwagę, że instaluję przy użyciu pip install https://...składni, która nie wymaga -e.
Taylor Edmiston
8

Musisz dołączyć # egg = Package, aby pip wiedział, czego się spodziewać pod tym adresem URL. Zobacz https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

więcej o jajach

Skylar Saveland
źródło
21
Co to znaczy „więc pip wie, czego się spodziewać pod tym adresem URL?” Czy jest coś innego niż #egg, które można dołączyć do takiego adresu URL?
Lorin Hochstein
Właściwie podoba mi się odpowiedź Willa z pip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)nie jestem pewien, czy jest używana gdzie indziej ...
Skylar Saveland
Jest sklonowany, ale nie jest zainstalowany :(
holms
8

Jajko to po prostu dołączony kod Pythona . W adresie URL git jajko to nazwa projektu. Wsparcie VCS

Zwykle instalujemy pakiety Pythona z Pypi, więc podajesz TYLKO nazwę i wersję pakietu (lub zakłada się najnowszą wersję, jeśli nie określisz). Następnie Pypi wyszukuje, które jajko chcesz i pip instaluje. pip install celeryzainstaluje najnowsze opublikowane jajko i pip install celery[redis]zainstaluje inne jajko, które zawiera ten sam pakiet selera, a także zainstaluje najnowsze jajka z wszystkich pakietów wymienionych jako zależności redis w pliku setup.py selera.

W przypadku ścieżek git i gitlab należy określić /{user|group}/{repository}.git@{tag}#egg={package-name}. istnieje różnica między #egg=celeryi #egg=celery[redis], ale oba będą pochodzić z tego samego kodu źródłowego.

„znacznik” może być również odgałęzieniem lub skrótem zatwierdzenia oprócz rzeczywistego znacznika. Zakłada się, że mastertak jest, jeśli nie określisz.

na przykład git+https://github.com/celery/celery.git#egg=celery==4.3.0wyewidencjonuje gałąź master i ją zainstaluje. Nawet jeśli podałeś numer wersji, nie jest on brany pod uwagę podczas instalacji. NUMER WERSJI JEST IGNOROWANY

Podczas instalacji przez git lub inne adresy URL VCS będziesz chciał znaleźć tag lub hash wersji, której potrzebujesz. Na przykład, git+https://github.com/celery/[email protected]#egg=celeryktóry pobierze zatwierdzenie oznaczone „v4.3.0”, a następnie zainstaluje pakiet z tego kodu źródłowego. Zakładając, że opiekunowie nie rażąco błędnie otagowali swoje repozytoria, możesz uzyskać taką wersję, jaką chcesz.

mehtunguh
źródło
6

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support mówi:

Składnik „nazwa projektu” przyrostka adresu URL „egg = -” jest używany przez pip w logice zależności do identyfikowania projektu przed pobraniem pip i analizą metadanych. Opcjonalny składnik „wersja” nazwy jajka nie ma znaczenia funkcjonalnego. Zapewnia jedynie czytelną dla człowieka wskazówkę, która wersja jest używana. W przypadku projektów, w których plik setup.py nie znajduje się w katalogu głównym projektu, używany jest komponent „subdirectory”. Wartość komponentu „subdirectory” powinna być ścieżką zaczynającą się od katalogu głównego projektu do miejsca, w którym znajduje się plik setup.py.

Z tego wnioskuję, że wartość egg jest używana tylko do sprawdzania zależności i dlatego uważam, że zgodnie z konwencją some-pypi-package-namenależy używać nazwy pakietu (tj. ), A nie żadnego zawartego folderu (tj. some_pypi_package_name)

Mario
źródło