Почему # egg = foo при установке pip из репозитория git

95

Когда я выполняю «pip install -e ...» для установки из репозитория git, я должен указать # egg = somename или pip жалоба. Например:

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

Каково значение этой «яичной» струны?

Лорин Хохштейн
источник
1
В этой части pip installдокументации говорится #egg=name, но нет четкого ответа.
Christian Long

Ответы:

35

per pip install -h строка "egg" - это каталог, который извлекается как часть установки

Уилл Айд
источник
12
Может это просто то же имя, что и репозиторий? Имеют ли значение случаи?
CMCDragonkai
14
"Каталог, который проверяется"? Так мне ввести название ветки? Придумай что-нибудь?
Крис
2
Если вы создали собственный пакет Python, при запуске setuptools project-name.egg-info/top_level.txtдолжен был быть создан каталог с именем . Используйте содержимое этого файла в качестве значения eggпараметра.
dspacejs
2
Я не могу понять, egg=...действительно ли имеет значение настройка. Пакет, который я устанавливаю, имеет несколько записей в файле top_level.txt. Я экспериментировал с сопоставлением его с namekwarg, в котором используется скрипт, setup.pyно также с произвольным значением. Результаты кажутся одинаковыми в любом случае. Обратите внимание, что я устанавливаю, используя pip install https://...синтаксис, который не требует -e.
Тейлор
7

Вы должны включить # egg = Package, чтобы pip знал, чего ожидать от этого URL. См. Https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

больше о яйцах

Скайлар Савеланд
источник
20
Что это значит: «Пип знает, чего ожидать от этого URL-адреса»? Есть ли что-то еще, кроме #egg, которое можно добавить к подобному URL-адресу?
Лорин Хохштейн
Мне действительно нравится ответ Уилла из pip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)я не уверен, что он используется где-то еще ...
Скайлар Савеланд
Он клонирован, но не установлен :(
holms
6

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support говорит:

Компонент «имя проекта» суффикса URL-адреса «egg = -» используется pip в своей логике зависимостей для идентификации проекта до загрузки pip и анализа метаданных. Необязательный компонент «версия» в имени яйца не имеет функционального значения. Он просто дает понятную подсказку о том, какая версия используется. Для проектов, где setup.py не находится в корне проекта, используется компонент «подкаталог». Значением компонента «subdirectory» должен быть путь, начинающийся от корня проекта до места, где находится setup.py.

Из этого я делаю вывод, что значение яйца используется только для проверки зависимостей, и поэтому я думаю, что по соглашению some-pypi-package-nameследует использовать имя пакета (т.е. ), а не какую-либо содержащуюся папку (т.е. some_pypi_package_name)

Марио
источник
6

Яйцо - это просто какой-то связанный код Python . В URL-адресе git яйцо - это имя проекта. Поддержка VCS

Обычно мы устанавливаем пакеты python из Pypi, поэтому вы указываете ТОЛЬКО имя и версию пакета (или предполагается последняя версия, если вы не указываете). Затем Pypi ищет, какое яйцо вы хотите, и устанавливает его. pip install celeryустановит последнее опубликованное яйцо и pip install celery[redis]установит другое яйцо, которое содержит тот же пакет сельдерея, а также установит последние яйца из тех пакетов, которые были указаны как зависимости для redis в файле setup.py celery.

Укажите пути git и gitlab /{user|group}/{repository}.git@{tag}#egg={package-name}. между #egg=celeryи есть разница #egg=celery[redis], но они оба происходят из одного и того же исходного кода.

«tag» также может быть хешем ветки или фиксации в дополнение к фактическому тегу. Предполагается, что будет, masterесли вы не укажете.

например, можно git+https://github.com/celery/celery.git#egg=celery==4.3.0было бы проверить главную ветку и установить ее. Даже если вы указали номер версии, он не учитывается при установке. НОМЕР ВЕРСИИ ИГНОРИРУЕТСЯ

При установке через git или другие URL-адреса VCS вам нужно будет найти тег или хэш нужной вам версии. Например, git+https://github.com/celery/celery.git@v4.3.0#egg=celeryпри проверке фиксации с тегом «v4.3.0» и последующей установке пакета из этого исходного кода. Предполагая, что сопровождающие не допустили грубого нарушения тегов в своих репозиториях, вы можете получить желаемую версию таким образом.

Mehtunguh
источник