Por que # egg = foo ao instalar pip do git repo

96

Quando faço um "pip install -e ..." para instalar a partir de um repositório git, tenho que especificar # egg = somename ou pip reclama. Por exemplo:

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

Qual é o significado desta string "ovo"?

Lorin Hochstein
fonte
1
Esta parte da pip installdocumentação fala sobre #egg=name, mas não dá uma resposta clara.
Christian Long

Respostas:

37

por pip install -h a string "ovo" é o diretório que é verificado como parte da instalação

Will Ayd
fonte
12
Pode ser apenas o mesmo nome do repositório? Os casos importam?
CMCDragonkai
14
"O diretório que é verificado"? Então, devo inserir o nome do branch? Faça alguma coisa?
Chris
2
Se você fez um pacote Python personalizado, quando executou setuptools, um diretório chamado project-name.egg-info/top_level.txtdeve ter sido criado. Use o conteúdo deste arquivo como o valor do eggparâmetro.
dspacejs
2
Não consigo descobrir se a egg=...configuração realmente importa. O pacote que estou instalando tem várias entradas no arquivo top_level.txt. Eu experimentei namecombiná- lo com o kwarg que o script usa, setup.pymas também com um valor arbitrário. Os resultados parecem ser os mesmos de qualquer maneira. Observe que estou instalando usando a pip install https://...sintaxe que não requer -e.
Taylor Edmiston
8

Você deve incluir # egg = Package para que pip saiba o que esperar daquele URL. Consulte https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

mais em ovos

Skylar Saveland
fonte
21
O que significa "então pip sabe o que esperar desse url?" Existe algo diferente de #egg que é válido para anexar a um url como esse?
Lorin Hochstein
Na verdade, gosto da resposta de Will do pip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)não tenho certeza se é usado em outro lugar ...
Skylar Saveland
Ele foi clonado, mas não instalado :(
holms
8

Um ovo é apenas um código python empacotado . Em um url git, o ovo é o nome do projeto. Suporte VCS

Normalmente instalamos pacotes python de Pypi, então você especifica SOMENTE o nome do pacote e a versão (ou assume a versão mais recente se você não especificar). Pypi então procura por qual ovo você quer e o pip o instala. pip install celeryinstalaria o último ovo publicado e pip install celery[redis]instalaria um ovo diferente que contém o mesmo pacote de aipo e também instalaria os ovos mais recentes de quaisquer pacotes listados como dependências para redis no setup.py do aipo.

Com caminhos git e gitlab, você especifica /{user|group}/{repository}.git@{tag}#egg={package-name}. há uma diferença entre #egg=celerye #egg=celery[redis], mas ambos virão do mesmo código-fonte.

"tag" também pode ser um branch ou um hash de commit, além de uma tag real. Presume-se que seja masterse você não especificar.

por exemplo, git+https://github.com/celery/celery.git#egg=celery==4.3.0verificaria o branch master e o instalaria. Mesmo que você tenha especificado um número de versão, ele não é levado em consideração na instalação. O NÚMERO DA VERSÃO ESTÁ IGNORADO

Ao instalar via git ou outros urls VCS, você vai querer encontrar a tag ou hash da versão que você precisa. Por exemplo, git+https://github.com/celery/[email protected]#egg=celeryque fará o checkout do commit com a tag "v4.3.0" e, em seguida, instalará o pacote desse código-fonte. Assumindo que os mantenedores não erraram em seus repositórios, você pode obter a versão que deseja assim.

mehtunguh
fonte
6

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support diz:

O componente "nome do projeto" do sufixo url "ovo = -" é usado pelo pip em sua lógica de dependência para identificar o projeto antes do pip baixar e analisar os metadados. O componente opcional de "versão" do nome do ovo não é funcionalmente importante. Ele meramente fornece uma pista legível sobre qual versão está em uso. Para projetos onde setup.py não está na raiz do projeto, o componente "subdiretório" é usado. O valor do componente "subdiretório" deve ser um caminho começando da raiz do projeto até onde setup.py está localizado.

A partir disso, deduzo que o valor do ovo é usado apenas para verificações de dependência e, portanto, acho que, por convenção, o nome do pacote (ou seja some-pypi-package-name) deve ser usado, não qualquer pasta contida (ou seja some_pypi_package_name)

Mario
fonte