So geben Sie in den Anforderungen.txt eine direkte Github-Quelle an


447

Ich habe mit dem Befehl eine Bibliothek installiert

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

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

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

In der requirements.txtDatei führt a pip install -r requirements.txtzu 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))

In der Dokumentation der Anforderungsdatei werden keine Links erwähnt, die den git+gitProtokollspezifizierer verwenden. Daher wird dies möglicherweise einfach nicht unterstützt.

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

Antworten:


327

Die Syntax von "bearbeitbaren" Paketen kann verwendet werden requirements.txt, um Pakete aus einer Vielzahl von VCS (git, hg, bzr, svn) zu importieren :

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

Es ist auch möglich, auf ein bestimmtes Commit hinzuweisen:

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

3
Ich habe es nicht geschafft, eine solche bearbeitbare Version lokal auszuchecken (wahrscheinlich aufgrund von Syntaxproblemen) und habe daher die git+gitVariante verwendet (die funktioniert hat). In requirements.txtIhrer Version funktioniert, also vielen Dank :)
Alfe

1
Der docsLink funktionierte nicht für mich; Ich habe einen älteren benutzt .
osa

42
Was ich nicht verstanden habe ist, dass die angezeigte Syntax genau den Anforderungen entspricht, dh vor dem -e steht kein Paketname.
Salbei

5
Das Hinzufügen von "-e" ist nicht erforderlich, je nachdem, ob sich das Paket im bearbeitbaren Modus befinden soll. Siehe Antwort von @qff.
Himmel

17
Sollte es nicht -e git+git://statt sein -e git://? Ich habe die Fehlermeldung "Sollte entweder ein Pfad zu einem lokalen Projekt oder eine VCS-URL sein, die mit svn +, git +, hg + oder bzr + beginnt" erhalten .
Bruce Wayne

423

Normalerweise würde Ihre requirements.txtDatei ungefähr so ​​aussehen:

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

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

Die folgenden Beispiele werden package-twomit einem GitHub-Repo aktualisiert . Der Text zwischen @und #bezeichnet die Besonderheiten des Pakets.

Geben Sie den Commit-Hash an ( 41b95ecim Kontext der Aktualisierung requirements.txt):

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

Geben Sie den Filialnamen ( master) an:

git+git://github.com/path/to/package-two@master#egg=package-two

Geben Sie tag ( 0.1) an:

git+git://github.com/path/to/package-two@0.1#egg=package-two

Geben Sie release ( 3.7.1) an:

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

Beachten Sie, dass dies #egg=package-twohier kein Kommentar ist, sondern dass der Paketname explizit angegeben werden soll

Dieser Blog-Beitrag enthält weitere Diskussionen zu diesem Thema.


54
Von all den anderen Antworten kann ich nicht glauben, dass keine von ihnen nur eine Anforderungsdatei mit einer Mischung aus "normalen" Anforderungen und einer zum Vergleich eingeworfenen Git-Datei gezeigt hat. Ich war so beeindruckt von den -eOptionen, die wie Kommandozeilen ( ) aussahen . Vielen Dank, dass Sie eine Mischung aus beiden gezeigt haben, damit ich dies in einen Zusammenhang bringen kann!
Hendy

Das Zeigen auf die Veröffentlichung 3.7.1mit git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-twohat bei mir nicht funktioniert. Was für mich funktioniert hat war git+git://github.com/path/to/package-two@3.7.1#egg=package-two.
Jean Paul

Diese Antwort war sehr hilfreich. Eines jedoch. Diese git+git://...Notation verursachte irgendwie ssh-relative Fehler auf meiner Linux-Box. Also habe ich sie auf git+https://...Notation umgestellt und dann funktionieren sie perfekt.
RayLuo

174

requirements.txtErmöglicht die folgenden Möglichkeiten zum Festlegen einer Abhängigkeit von einem Paket in einem Git-Repository ab Pip 7.0: 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

Für Github bedeutet dies, dass Sie Folgendes tun können (beachten Sie das Ausgelassene -e):

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

Warum die zusätzliche Antwort?
Die -eFlagge in den anderen Antworten hat mich etwas verwirrt. Hier ist meine Klarstellung:

Das Flag -eoder --editablebedeutet, dass das Paket installiert ist <venv path>/src/SomeProjectund somit nicht in dem tief vergrabenen, in dem <venv path>/lib/pythonX.X/site-packages/SomeProjectes sonst platziert würde. 2

Dokumentation


9
Beachten Sie jedoch, dass wenn Sie das -enächste weglassen, pip freezemöglicherweise nicht die richtigen Ergebnisse für dieses Paket
angezeigt werden

82

Installieren Sie zuerst mit git+gitoder git+https, wie Sie wissen. Beispiel für die Installation kronokdes brabeionProjektzweigs:

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

Zweitens verwenden Sie pip freeze > requirements.txt, um das Richtige in Ihrem zu bekommen requirements.txt. 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

4
pip freeze listet immer noch das Paket auf, das ich als geschlossene, vordere Version verwende. und keine direkte Github-Kasse
Antoine Claval

4
Sie müssen die Option "-e" für "Pip Freeze" verwenden, um eine URL zu generieren
Janusz Skonieczny

2
pip 9.0.1:no such option: -e
sds

Du meinst git+https? In dem Text, den Sie sagen, git+gitund im Codegit+https
Antony Hatchkins

@ AnthonyHatchkins behoben.
osa

17

Seit pip v1.5(veröffentlicht am 1. Januar 2014: CHANGELOG , PR ) können Sie auch ein Unterverzeichnis eines Git- Repos angeben, das Ihr Modul enthält. Die Syntax sieht folgendermaßen aus:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

Hinweis: Als Autor eines Pip-Moduls möchten Sie Ihr Modul im Idealfall wahrscheinlich in einem eigenen Top-Level-Repo veröffentlichen, wenn Sie können. Diese Funktion ist jedoch hilfreich für einige bereits vorhandene Repos, die Python-Module in Unterverzeichnissen enthalten. Sie könnten gezwungen sein, sie auf diese Weise zu installieren, wenn sie nicht auch auf pypi veröffentlicht werden.


1

Ich finde, dass es schwierig ist, pip3 (v9.0.1, wie vom Paketmanager von Ubuntu 18.04 installiert) dazu zu bringen, das zu installieren, was ich ihm sage. Ich poste diese Antwort, um jedem Zeit zu sparen, der auf dieses Problem stößt.

Das Einfügen in eine Datei "require.txt" ist fehlgeschlagen:

git+git://github.com/myname/myrepo.git@my-branch#egg=eggname

Mit "fehlgeschlagen" meine ich, dass beim Herunterladen des Codes von Git die ursprüngliche Version des Codes, wie sie auf PyPi zu finden ist, anstelle des Codes im Repo in diesem Zweig installiert wurde.

Die Installation des Commmit anstelle des Filialnamens funktioniert jedoch wie folgt:

git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname

Sind Sie sicher, dass Ihre Niederlassung auch remote ist?
Alfe

Es zeigte nicht auf eine lokale Kopie, wenn Sie sich das fragen.
Werfen Sie das Konto
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.