it-swarm.com.de

Wie man in der requirements.txt eine direkte Github-Quelle angibt

Ich habe eine Bibliothek mit dem Befehl installiert

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

welches es direkt aus einem Github-Repository installiert. Dies funktioniert einwandfrei und ich möchte diese Abhängigkeit in meinem requirements.txt haben. Ich habe mir andere Tickets wie this angesehen, aber das hat mein Problem nicht gelöst. Wenn ich so etwas sage

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

in der Datei requirements.txt führt ein pip install -r requirements.txt zur folgenden 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 mit dem Protokollspezifizierer git+git erwähnt, sodass dies möglicherweise nicht unterstützt wird.

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

350
Alfe

Syntax für bearbeitbare Pakete kann in requirements.txt verwendet werden, 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/[email protected]#Egg=elasticutils
272
stalk

Normalerweise würde Ihre requirements.txt -Datei 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 nicht die package-name== -Konvention.

Die folgenden Beispiele aktualisieren package-two mithilfe eines GitHub-Repos. Der Text zwischen @ und # kennzeichnet die Besonderheiten des Pakets.

Geben Sie einen Commit-Hash (41b95ec im Kontext des aktualisierten requirements.txt) an:

package-one==1.9.4
git+git://github.com/path/to/[email protected]#Egg=package-two
package-three==1.0.1

Geben Sie den Filialnamen an (master):

git+git://github.com/path/to/[email protected]#Egg=package-two

Tag angeben (0.1):

git+git://github.com/path/to/[email protected]#Egg=package-two

Release angeben (3.7.1):

git+git://github.com/path/to/[email protected]/tag/v3.7.1#Egg=package-two

Beachten Sie, dass #Egg=package-two hier kein Kommentar ist, sondern geben Sie den Paketnamen explizit an

Dieser Blog-Beitrag hat weitere Diskussionen zum Thema.

283
YPCrumble

requirements.txt bietet die folgenden Möglichkeiten, eine Abhängigkeit von einem Paket in einem Git-Repository ab Pip 7.0 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 [email protected]:SomeProject#Egg=SomeProject

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

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

Warum die zusätzliche Antwort?
Ich war durch das -e -Flag in den anderen Antworten etwas verwirrt. Hier ist meine Erläuterung:

Das -e oder --editable -Flag bedeutet, dass das Paket in <venv path>/src/SomeProject installiert ist und sich somit nicht in dem tief vergrabenen <venv path>/lib/pythonX.X/site-packages/SomeProject befindet, in dem es sonst abgelegt würde.2

Dokumentation

160
qff

Installieren Sie zuerst mit git+git oder git+https, wie Sie es kennen. Beispiel für die Installation des Zweigs von kronok des Projekts brabeion:

pip install -e git+https://github.com/kronok/[email protected]#Egg=brabeion

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

-e git+https://github.com/kronok/[email protected]#Egg=brabeion-master

Drittens testen Sie das Ergebnis:

pip uninstall brabeion
pip install -r requirements.txt
73
osa

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 Pip-Modulautor möchten Sie Ihr Modul idealerweise in einem eigenen Repo auf oberster Ebene veröffentlichen, wenn Sie können. Diese Funktion ist jedoch hilfreich für einige bereits vorhandene Repos, die python Module in Unterverzeichnissen enthalten. Möglicherweise müssen Sie sie auf diese Weise installieren, wenn sie nicht auch auf pypi veröffentlicht werden.

15
TrinitronX