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”?
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”?
Odpowiedzi:
na pip install -h ciąg znaków „jajko” jest katalogiem, który jest pobierany podczas instalacji
project-name.egg-info/top_level.txt
powinien zostać utworzony. Użyj zawartości tego pliku jako wartości egg
parametru.
egg=...
ustawienie ma znaczenie. Pakiet, który instaluję, ma wiele wpisów w pliku top_level.txt. Eksperymentowałem z dopasowaniem go do name
kwarg, którego używa skrypt, setup.py
ale 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
.
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
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 ...
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 celery
zainstaluje 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=celery
i #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 master
tak jest, jeśli nie określisz.
na przykład git+https://github.com/celery/celery.git#egg=celery==4.3.0
wyewidencjonuje 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/celery.git@v4.3.0#egg=celery
któ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.
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-name
należy używać nazwy pakietu (tj. ), A nie żadnego zawartego folderu (tj. some_pypi_package_name
)
pip install
dokumentacji mówi o tym#egg=name
, ale nie daje jasnej odpowiedzi.