web-dev-qa-db-fra.com

Pourquoi # Egg = foo lors de l'installation de pip depuis git repo

Quand je fais un "pip install -e ..." pour installer à partir d'un dépôt git, je dois spécifier # Egg = un nom ou pip se plaint. Par exemple:

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

Quelle est la signification de cette chaîne "Egg"?

77
Lorin Hochstein

par pip install -h la chaîne "Egg" est le répertoire qui est extrait dans le cadre de l'installation

28
Will Ayd

Vous devez inclure # Egg = Package pour que pip sache à quoi s'attendre à cette URL. Voir https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

plus sur les œufs

7
Skylar Saveland

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

Le composant "project name" du suffixe d'URL "Egg = -" est utilisé par pip dans sa logique de dépendance pour identifier le projet avant le téléchargement de pip et l'analyse des métadonnées. Le composant optionnel "version" du nom Egg n'a pas d'importance fonctionnelle. Il fournit simplement un indice lisible par l'homme quant à la version utilisée. Pour les projets où setup.py n'est pas à la racine du projet, le composant "sous-répertoire" est utilisé. La valeur du composant "sous-répertoire" doit être un chemin partant de la racine du projet jusqu'à l'emplacement de setup.py.

J'en déduis que la valeur Egg n'est utilisée que pour les vérifications de dépendances et donc je pense, par convention, que le nom du package (c'est-à-dire some-pypi-package-name) doit être utilisé, pas n'importe quel dossier contenu (c'est-à-dire some_pypi_package_name)

3
Mario

Un œuf est juste certains regroupés python . Dans une url git, l'œuf est le nom du projet. Support VCS

Normalement, nous installons python packages de Pypi, donc vous spécifiez UNIQUEMENT le nom et la version du package (ou il suppose la dernière version si vous ne spécifiez pas). Pypi recherche ensuite quel Egg vous voulez et pip installe cela. pip install celery installerait le dernier œuf publié et pip install celery[redis] installerait un Egg différent qui contient le même package céleri et installe également les derniers oeufs de tous les packages répertoriés comme dépendances pour redis dans setup.py de céleri.

Avec les chemins git et gitlab, vous spécifiez /{user|group}/{repository}.git@{tag}#Egg={package-name}. il y a une différence entre #Egg=celery et #Egg=celery[redis], mais ils proviendront tous les deux du même code source.

"tag" peut également être une branche ou un hachage de validation en plus d'une balise réelle. Il est supposé être master si vous ne spécifiez pas.

par exemple, git+https://github.com/celery/celery.git#Egg=celery==4.3.0 vérifierait la branche principale et l'installerait. Même si vous avez spécifié un numéro de version, il n'est pas pris en compte dans l'installation. LE NUMÉRO DE VERSION IS IGNORÉ

Lors de l'installation via git ou d'autres URL VCS, vous voudrez trouver la balise ou le hachage de la version dont vous avez besoin. Par exemple, git+https://github.com/celery/[email protected]#Egg=celery qui va extraire le commit balisé "v4.3.0" puis installer le package à partir de ce code source. En supposant que les responsables n'ont pas marqué de manière flagrante leurs référentiels, vous pouvez obtenir la version que vous souhaitez comme ça.

1
mehtunguh