Konfigurieren, damit die Pip-Installation von Github aus funktioniert

226

Wir möchten pip with github verwenden, um private Pakete auf unseren Produktionsservern zu installieren. Diese Frage betrifft, was im Github-Repo enthalten sein muss, damit die Installation erfolgreich ist.

Angenommen, die folgende Befehlszeile (die sich einwandfrei authentifiziert und versucht zu installieren):

pip install git+ssh://git@github.com/BlahCo/search/tree/prod_release_branch/ProductName

Was muss sich im Produktnamen befinden? Ist es der Inhalt dessen, was normalerweise in der TAR-Datei enthalten ist, nachdem setup.py mit der Option sdist ausgeführt wurde, oder ist es die eigentliche tar.gz-Datei oder etwas anderes?

Ich frage hier, weil ich verschiedene Variationen ausprobiert habe und es nicht zum Laufen bringen kann. Jede Hilfe geschätzt.

ccgillett
quelle

Antworten:

290

Sie benötigen das gesamte Python-Paket mit einer setup.pyDatei darin.

Ein Paket mit dem Namen foowäre:

foo # the installable package
├── foo
   ├── __init__.py
   └── bar.py
└── setup.py

Und installieren Sie von Github wie:

$ pip install git+https://github.com/myuser/foo.git@v123
or
$ pip install git+https://github.com/myuser/foo.git@newbranch

Weitere Informationen unter https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

Hugo Tavares
quelle
3
Das obige funktioniert, vielen Dank. Aber was ist, wenn ich Releases in einem Unterverzeichnis innerhalb eines Repos habe, also suche ich statt foo.git nach foo / release / ProductVer. Ist das möglich und wenn ja wie? Vielen Dank für die Hilfe!
ccgillett
4
Nein, das ist nicht möglich. pip wird nur aus dem Root-Repository-Verzeichnis installiert, zumindest für git. Ich weiß nicht, wie sich Subversion verhält ...
Hugo Tavares
3
Wenn Sie dies über SSH und private Repos tun möchten, ist dies ein Beitrag darüber, wie das geht
Jonathan
Warum haben Sie die -eOption (bearbeitbarer Modus) nicht an pip übergeben?
Amelio Vazquez-Reina
14
Hier ist das neue URL-Schema: pip install git+https://github.com/pypa/pip.git Quelle: pip Github repo
aboutaaron
111

Ich hatte ein ähnliches Problem, als ich von Github Repo installieren musste, wollte aber nicht Git usw. installieren.

Der einfache Weg, dies zu tun, ist die Verwendung des Zip-Archivs des Pakets. In /zipball/masteran die Repo - URL:

    $ pip install https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Downloading/unpacking https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
  Downloading master
  Running setup.py egg_info for package from https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Installing collected packages: django-debug-toolbar-mongo
  Running setup.py install for django-debug-toolbar-mongo
Successfully installed django-debug-toolbar-mongo
Cleaning up...

Auf diese Weise können Sie Pip mit Github-Quell-Repositorys arbeiten lassen.

Dmitry
quelle
2
Dies ist die einzige Antwort, die auch unter Windows funktioniert
Divenex
Wie kann dies mit privaten Repositories gemacht werden? (wie die Frage stellt)
Rodrigo E. Principe
29

Wenn Sie eine requirements.txtDatei verwenden möchten, benötigen Sie gitund so etwas wie den folgenden Eintrag, um den Hauptzweig in Ihrem anonym abzurufen requirements.txt.

Für die reguläre Installation:

git+git://github.com/celery/django-celery.git

Für " bearbeitbare " Installation:

-e git://github.com/celery/django-celery.git#egg=django-celery

Im bearbeitbaren Modus wird der Quellcode des Projekts ./srcin das aktuelle Verzeichnis heruntergeladen . Es ermöglicht pip freezedie Ausgabe des korrekten Github-Speicherorts des Pakets.

wieczorek1990
quelle
3
Woher kommen diese Eiernamen? Es kann kein Paket in Django geladen werden, nachdem das Pip-Paket durch Github Repo
Holms ersetzt wurde.
@holms Lookup Name in setup.py
wieczorek1990
Was ist #egg=django-celery? Ist das ein Platzhalter?
Enchance
@enchance Es ist der Paketname.
wieczorek1990
13

Klonen Sie das Ziel-Repository auf die gleiche Weise wie beim Klonen eines anderen Projekts:

git clone git@github.com:myuser/foo.git

Dann installieren Sie es im Entwicklungsmodus:

cd foo
pip install -e .

Sie können alles ändern, was Sie nicht möchten, und jeder Code, der das fooPaket verwendet, verwendet geänderten Code.

Diese Lösung bietet zwei Vorteile:

  1. Sie können das Paket in Ihrem Home-Projektverzeichnis installieren.
  2. Das Paket enthält .gitdir, also ist es das reguläre Git-Repository. Sie können sofort an Ihre Gabel drücken.
Lawine
quelle
2
Ich kann bezeugen, dass diese Lösung magisch ist. In meinem Fall wollte ich mich hacken pip, also habe ich das pipRepository geklont , eine virtuelle Umgebung erstellt, sie aktiviert und es getan pip install -e .. Dann war das pipin der virtuellen Umgebung im Entwicklungsmodus! Ich bin beeindruckt, dass dies auch mit dem Paketmanager selbst funktioniert.
Radon Rosborough
Das ist toll! Ich pip liststelle fest, dass das betreffende Paket bei der Installation mit dieser Methode und der anschließenden Ausführung Verweise auf den Git-Zweig und den absoluten Pfad enthält, von dem aus es installiert wurde. Enthält es Verweise auf diese oder kann die Quelle gelöscht werden?
MadPhysicist
0

Sie können diesen Weg in Colab versuchen

!git clone https://github.com/UKPLab/sentence-transformers.git
!pip install -e /content/sentence-transformers
import sentence_transformers
Shaina Raza
quelle