135 votes

Pourquoi #egg=foo lors d'une installation par pip à partir d'un dépôt git ?

Lorsque je fais un "pip install -e ..." pour installer à partir d'un dépôt git, je dois spécifier #egg=somename 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 "œuf" ?

49voto

Will Ayd Points 2832

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

35voto

mehtunguh Points 310

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

Normalement, nous installons les paquets python à partir de Pypi, donc vous spécifiez SEULEMENT le nom et la version du paquet (ou il suppose la dernière version si vous ne la spécifiez pas). Pypi recherche alors l'œuf que vous voulez et pip l'installe. pip install celery installerait le dernier œuf publié et pip install celery[redis] installe un œuf différent qui contient le même paquet celery et installe également les derniers œufs des paquets listés comme dépendants de redis dans le setup.py de celery.

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 y #egg=celery[redis] mais ils seront tous deux issus du même code source.

"tag" peut également être une branche ou un hash de commit en plus d'un tag réel. Il est supposé être master si vous ne le spécifiez pas.

par exemple, git+https://github.com/celery/celery.git#egg=celery==4.3.0 je vérifierais la branche master et l'installerais. Même si vous avez spécifié un numéro de version, celui-ci n'est pas pris en compte dans l'installation. LE NUMÉRO DE VERSION EST IGNORÉ

Lors d'une installation via git ou d'autres urls VCS, vous voudrez trouver le tag ou le hash de la version dont vous avez besoin. Par exemple, git+https://github.com/celery/celery.git@v4.3.0#egg=celery qui va extraire le commit marqué "v4.3.0" et installer le paquet à partir de ce code source. En supposant que les mainteneurs n'ont pas mal étiqueté leurs dépôts, vous pouvez obtenir la version que vous voulez de cette façon.

14voto

Mario Points 37

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

Le composant "nom du projet" du suffixe url "egg=-" est utilisé par pip dans sa logique de dépendance pour identifier le projet avant que pip ne télécharge et n'analyse les métadonnées. L'adresse composant optionnel "version" du nom de l'œuf n'est pas fonctionnellement important. Il fournit simplement un indice lisible par l'homme pour savoir quelle version est utilisée. Pour les projets où setup.py n'est pas dans la racine du projet, le composant "subdirectory" est utilisé. La valeur du composant "subdirectory" (sous-répertoire) doit être un chemin partant de la racine du projet vers l'endroit où se trouve setup.py est situé.

J'en déduis que la valeur de l'œuf n'est utilisée que pour les vérifications de dépendance et je pense donc que, par convention, le nom du paquet (c'est-à-dire le nom du paquet) est utilisé. some-pypi-package-name ) doit être utilisé, et non pas un dossier contenu (c'est à dire some_pypi_package_name )

7voto

Skylar Saveland Points 4131

Vous devez inclure #egg=Package pour que pip sache ce qu'il doit attendre de cette URL. Voir https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

plus sur les œufs

1voto

Adam Matan Points 15690

Citation : le manuel :

pip examine 2 fragments pour les URLs VCS :

œuf : Pour spécifier le "nom du projet" à utiliser dans la logique de résolution des de pip. ex : egg=nom_du_projet

sous-répertoire : Pour indiquer le chemin d'accès au paquet Python, lorsqu'il n'est pas n'est pas dans la racine du répertoire VCS. ex : pkg_dir

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X