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?

Alfe
quelle

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
Stiel
quelle
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.

YPCrumble
quelle
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/[email protected]#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

qff
quelle
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
osa
quelle
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.

TrinitronX
quelle
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
Konto wegwerfen
quelle
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