747 Stimmen

Wie kann man in der requirements.txt eine direkte Github-Quelle angeben?

Ich habe eine Bibliothek mit dem Befehl installiert

pip install git+git://github.com/mozilla/elasticutils.git

die sie direkt aus einem Github-Repository installiert. Das funktioniert gut und ich möchte diese Abhängigkeit in meiner requirements.txt haben. Ich habe mir andere Tickets wie dieses angesehen, aber das hat mein Problem nicht gelöst. Wenn ich so etwas wie

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

in die Datei requirements.txt einfüge, führt ein pip install -r requirements.txt zu folgender Ausgabe:

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

Die Dokumentation der Anforderungsdatei erwähnt keine Links mit dem git+git Protokoll-Spezifizierer, daher wird dies möglicherweise einfach nicht unterstützt.

Hat jemand eine Lösung für mein Problem?

916voto

YPCrumble Punkte 23372

Normalerweise würde Ihre requirements.txt-Datei so aussehen:

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

Um ein Github-Repository anzugeben, benötigen Sie nicht die Konvention package-name==.

Die folgenden Beispiele aktualisieren package-two mit einem GitHub-Repository. Der Text nach @ gibt die Details des Pakets an.

Commit-Hash angeben (41b95ec im Kontext von aktualisiertem requirements.txt):

package-one==1.9.4
package-two @ git+https://github.com/owner/repo@41b95ec
package-three==1.0.1

Branch-Name angeben (main):

package-two @ git+https://github.com/owner/repo@main

Tag angeben (0.1):

package-two @ git+https://github.com/owner/repo@0.1

Release angeben (3.7.1):

package-two @ git+https://github.com/owner/repo@releases/tag/v3.7.1

Beachten Sie, dass Sie in bestimmten Versionen von pip die Paketversion in der setup.py des Pakets aktualisieren müssen, da pip davon ausgeht, dass die Anforderung bereits erfüllt ist und die neue Version nicht installiert wird. Wenn Sie beispielsweise 1.2.1 installiert haben und dieses Paket mit Ihrer eigenen Version fork wollen, könnten Sie die oben genannte Technik in Ihrer requirements.txt verwenden und dann setup.py auf 1.2.1.1 aktualisieren.

Siehe auch die pip-Dokumentation zu VCS-Unterstützung.

390voto

stalk Punkte 11616

Syntax für "Bearbeitbare" Pakete kann in requirements.txt verwendet werden, um Pakete aus verschiedenen VCS (git, hg, bzr, svn) zu importieren:

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

Es ist auch möglich, auf einen bestimmten Commit zu verweisen:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

209voto

qff Punkte 4855

requirements.txt ermöglicht es ab pip 7.0, eine Abhängigkeit von einem Paket in einem Git-Repository auf folgende Weise anzugeben:1

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject (ab Januar 2020 veraltet)

Für Github bedeutet das (beachten Sie das weggelassene -e):

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

Warum die zusätzliche Antwort?
Ich war etwas verwirrt von der -e-Flagge in den anderen Antworten, daher hier meine Klarstellung:

Die -e-Flagge oder --editable-Flagge bedeutet, dass das Paket in /src/SomeProject installiert wird und nicht in /lib/pythonX.X/site-packages/SomeProject, wo es normalerweise platziert würde.2

Dokumentation

98voto

Sergey Orshanskiy Punkte 6434

Zuerst installieren Sie mit git+git oder git+https, auf jede erdenkliche Weise, die Ihnen bekannt ist. Beispiel für die Installation des kronok-Zweigs des Projekts brabeion:

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

Zweitens verwenden Sie pip freeze > requirements.txt, um das Richtige in Ihrer requirements.txt zu erhalten. In diesem Fall erhalten Sie:

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

Drittens testen Sie das Ergebnis:

pip uninstall brabeion
pip install -r requirements.txt

25voto

TrinitronX Punkte 4717

Seit pip v1.5, (veröffentlicht am 1. Januar 2014: Änderungsprotokoll, PR) können Sie auch ein Unterverzeichnis eines Git-Repositorys angeben, um Ihr Modul zu enthalten. Die Syntax sieht so aus:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # installieren Sie ein Python-Paket aus einem Repo-Unterverzeichnis

Hinweis: Als Autor eines pip-Moduls möchten Sie Ihr Modul idealerweise in einem eigenen Top-Level-Repo veröffentlichen, wenn möglich. Diese Funktion ist jedoch für einige vorhandene Repos hilfreich, die Python-Module in Unterverzeichnissen enthalten. Möglicherweise müssen Sie sie auf diese Weise installieren, wenn sie auch nicht auf pypi veröffentlicht sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X