Warum # Ei = foo bei der Pip-Installation von Git Repo

89

Wenn ich eine "pip install -e ..." mache, um von einem Git-Repo zu installieren, muss ich #gg = somename angeben oder pip beschwert sich. Beispielsweise:

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

Welche Bedeutung hat diese "Ei" -Saite?

Lorin Hochstein
quelle
Dieser Teil der pip installDokumentation spricht darüber #egg=name, gibt aber keine klare Antwort.
Christian Long

Antworten:

33

per pip install -h ist die Zeichenfolge "Ei" das Verzeichnis, das im Rahmen der Installation ausgecheckt wird

Will Ayd
quelle
12
Kann dies nur derselbe Name wie das Repository sein? Sind Fälle wichtig?
CMCDragonkai
13
"Das Verzeichnis, das ausgecheckt wird"? Also gebe ich den Filialnamen ein? Etwas erfinden?
Chris
1
Wenn Sie ein benutzerdefiniertes Python-Paket erstellt haben und setuptools ausgeführt haben, sollte ein Verzeichnis mit dem Namen project-name.egg-info/top_level.txterstellt worden sein. Verwenden Sie den Inhalt dieser Datei als Wert für den eggParameter.
dspacejs
1
Ich kann nicht herausfinden, ob die egg=...Einstellung wirklich wichtig ist. Das Paket, das ich installiere, enthält mehrere Einträge in der Datei top_level.txt. Ich habe experimentiert, um es mit dem namekwarg abzugleichen, in dem das Skript verwendet, setup.pyaber auch mit einem beliebigen Wert. Die Ergebnisse scheinen in beiden Fällen gleich zu sein. Beachten Sie, dass ich mit der pip install https://...Syntax installiere, die nicht erforderlich ist -e.
Taylor Edmiston
8

Sie müssen # egg = Package einschließen, damit pip weiß, was unter dieser URL zu erwarten ist. Siehe https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

mehr über Eier

Skylar Saveland
quelle
17
Was bedeutet das "Pip weiß also, was bei dieser URL zu erwarten ist?" Gibt es etwas anderes als #egg, das gültig ist, um an eine solche URL anzuhängen?
Lorin Hochstein
Ich mag Wills Antwort von der pip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)ich bin mir nicht sicher, ob sie woanders verwendet wird ...
Skylar Saveland
Es ist geklont, aber nicht installiert :(
Holms
4

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

Die Komponente "Projektname" des URL-Suffixes "Ei = -" wird von pip in seiner Abhängigkeitslogik verwendet, um das Projekt zu identifizieren, bevor pip die Metadaten herunterlädt und analysiert. Die optionale "Versions" -Komponente des Eiernamens ist funktionell nicht wichtig. Es gibt lediglich einen lesbaren Hinweis darauf, welche Version verwendet wird. Für Projekte, bei denen sich setup.py nicht im Stammverzeichnis des Projekts befindet, wird die Komponente "Unterverzeichnis" verwendet. Der Wert der Komponente "Unterverzeichnis" sollte ein Pfad sein, der vom Stamm des Projekts zu setup.py beginnt.

Daraus schließe ich, dass der Ei-Wert nur für Abhängigkeitsprüfungen verwendet wird, und daher denke ich, dass gemäß Konvention der Paketname (dh some-pypi-package-name) verwendet werden sollte, nicht irgendein enthaltener Ordner (dh some_pypi_package_name)

Mario
quelle
3

Ein Ei ist nur ein gebündelter Python-Code . In einer Git-URL ist das Ei der Projektname. VCS-Unterstützung

Normalerweise installieren wir Python-Pakete von Pypi, daher geben Sie NUR den Paketnamen und die Version an (oder es wird die neueste Version angenommen, wenn Sie dies nicht angeben). Pypi sucht dann nach dem gewünschten Ei und pip installiert das. pip install celerywürde das neueste veröffentlichte Ei pip install celery[redis]installieren und würde ein anderes Ei installieren, das das gleiche Selleriepaket enthält, und würde auch die neuesten Eier von allen Paketen installieren, die als Abhängigkeiten für Redis in der Setup.py von Sellerie aufgeführt sind.

Mit git- und gitlab-Pfaden geben Sie an /{user|group}/{repository}.git@{tag}#egg={package-name}. Es gibt einen Unterschied zwischen #egg=celeryund #egg=celery[redis], aber beide stammen aus demselben Quellcode.

"tag" kann neben einem tatsächlichen Tag auch ein Zweig oder ein Commit-Hash sein. Es wird angenommen, masterwenn Sie nicht angeben.

Zum Beispiel git+https://github.com/celery/celery.git#egg=celery==4.3.0würde der Hauptzweig auschecken und diesen installieren. Obwohl Sie eine Versionsnummer angegeben haben, wird diese bei der Installation nicht berücksichtigt. Die Versionsnummer wird ignoriert

Bei der Installation über Git oder andere VCS-URLs möchten Sie das Tag oder den Hash der benötigten Version finden. Beispiel: git+https://github.com/celery/[email protected]#egg=celeryHiermit wird das Commit mit dem Tag "v4.3.0" ausgecheckt und anschließend das Paket aus diesem Quellcode installiert. Angenommen, die Betreuer haben ihre Repositorys nicht ungeheuerlich falsch markiert, können Sie die gewünschte Version erhalten.

mehtunguh
quelle