Ich versuche, ein Python-Paket aus einem privaten GitHub-Repository zu installieren. Für ein öffentliches Repository kann ich den folgenden Befehl ausgeben, der einwandfrei funktioniert:
pip install git+git://github.com/django/django.git
Wenn ich dies jedoch für ein privates Repository versuche:
pip install git+git://github.com/echweb/echweb-utils.git
Ich erhalte folgende Ausgabe:
Downloading/unpacking git+git://github.com/echweb/echweb-utils.git
Cloning Git repository git://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build
Complete output from command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build:
fatal: The remote end hung up unexpectedly
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build...
----------------------------------------
Command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build failed with error code 128
Ich denke, das liegt daran, dass ich versuche, auf ein privates Repository zuzugreifen, ohne eine Authentifizierung bereitzustellen. Ich habe daher versucht, Git + zu verwenden, in der ssh
Hoffnung, dass pip meinen öffentlichen SSH-Schlüssel zur Authentifizierung verwenden würde:
pip install git+ssh://github.com/echweb/echweb-utils.git
Dies ergibt die folgende Ausgabe:
Downloading/unpacking git+ssh://github.com/echweb/echweb-utils.git
Cloning Git repository ssh://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build
Complete output from command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build:
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
----------------------------------------
Command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build failed with error code 128
Ist das, was ich versuche, überhaupt möglich? Wenn ja, wie kann ich das machen?
eval $(ssh-agent); ssh-add ~/.ssh/github_id_rsa
pip-Installationen zu verwenden, und führen Sie sie anschließend aus, indem Sie pip.pypa.io/en/stable/reference/pip_install/#gitAntworten:
Sie können das
git+ssh
URI-Schema verwenden, müssen jedoch einen Benutzernamen festlegen:Sehen Sie den
git@
Teil in der URI?PS: Lesen Sie auch über Bereitstellungsschlüssel .
PPS: In meiner Installation funktioniert das URI-Schema "git + ssh" nur mit "bearbeitbaren" Anforderungen:
Denken Sie daran : Ändern Sie das
:
Zeichen, dasgit remote -v
in ein/
Zeichen gedruckt wird, bevor Sie die Adresse der Fernbedienung impip
Befehl verwenden:Wenn Sie vergessen, erhalten Sie folgende Fehlermeldung:
quelle
git+ssh://[email protected]/echweb/echweb-utils.git
Schema in meiner Anforderungsdatei. Ich habe hier eine neue Frage geöffnet: stackoverflow.com/questions/18883430/… . Jede Hilfe wäre großartig.git+ssh://[email protected]/echweb/echweb-utils.git
inrequirements.txt
Werke zu stecken , was großartig ist.pip install git+ssh://[email protected]/echweb/echweb-utils.git@branch-name
Wenn Sie das private Repository lokal geklont haben, können Sie als zusätzliche Technik Folgendes tun:
Moderner können Sie dies einfach tun (und das
-e
bedeutet, dass Sie keine Änderungen vornehmen müssen, bevor sie reflektiert werden):quelle
Sie können dies direkt mit der HTTPS-URL wie folgt tun:
Dies funktioniert beispielsweise auch nur durch Anhängen dieser Zeile in der Datei require.txt in einem Django- Projekt.
quelle
Es funktioniert auch mit Bitbucket :
Pip verwendet in diesem Fall Ihre SSH-Schlüssel.
quelle
Die Syntax für die Anforderungsdatei finden Sie hier:
https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format
Verwenden Sie zum Beispiel:
Wenn Sie möchten, dass die Quelle nach der Installation erhalten bleibt.
Oder nur
wenn Sie nur möchten, dass es installiert wird.
quelle
Ich fand es viel einfacher, Token als SSH-Schlüssel zu verwenden. Ich konnte nicht viel gute Dokumentation dazu finden, daher bin ich auf diese Lösung hauptsächlich durch Ausprobieren gestoßen. Darüber hinaus weisen die Installation von Pip- und Setuptools einige subtile Unterschiede auf. aber dieser Weg sollte für beide funktionieren.
GitHub bietet (derzeit ab August 2016) keine einfache Möglichkeit, den Zip / Tarball von privaten Repositories abzurufen. Sie müssen also auf setuptools zeigen, um setuptools mitzuteilen, dass Sie auf ein Git-Repository verweisen:
Ein paar Anmerkungen hier:
0
) einfügen , auch wenn auf PyPI kein Paket vorhanden ist . Dies muss eine tatsächliche Zahl sein, kein Wort.git+
, um setuptools mitzuteilen, dass das Repository geklont werden soll, anstatt auf einen Zip / Tarball zu zeigenversion
kann ein Zweig, ein Tag oder ein Commit-Hash sein--process-dependency-links
wenn Sie von pip installierenquelle
setup.py
sollte keine konkreten Abhängigkeiten enthalten, sondern nur abstrakte. Dies gibt eine konkrete Abhängigkeit von ansetup.py
.Ich habe eine Möglichkeit gefunden, ein privates GitLab-Repository, für das keine Kennwortabfrage erforderlich ist, automatisch per Pip-Installation zu installieren. Dieser Ansatz verwendet GitLab "Deploy Keys" und eine SSH-Konfigurationsdatei, sodass Sie andere Schlüssel als Ihre persönlichen SSH-Schlüssel bereitstellen können (in meinem Fall zur Verwendung durch einen Bot). Vielleicht kann eine freundliche Seele mit GitHub nachprüfen.
Erstellen Sie einen neuen SSH-Schlüssel:
Die Datei sollte als
~/.ssh/GitLab_Robot_Deploy_Key
und angezeigt werden~/.ssh/GitLab_Robot_Deploy_Key.pub
.Kopieren Sie den Inhalt der
~/.ssh/GitLab_Robot_Deploy_Key.pub
Datei und fügen Sie ihn in das GitLab-Dialogfeld "Schlüssel bereitstellen" ein.Testen Sie den neuen Bereitstellungsschlüssel
Der folgende Befehl weist SSH an, Ihren neuen Bereitstellungsschlüssel zum Einrichten der Verbindung zu verwenden. Bei Erfolg sollten Sie die Meldung erhalten: "Willkommen bei GitLab, Benutzername!"
Erstellen Sie die SSH-Konfigurationsdatei
Verwenden Sie als Nächstes einen Editor, um eine
~/.ssh/config
Datei zu erstellen . Fügen Sie den folgenden Inhalt hinzu. Der 'Host'-Wert kann beliebig sein (denken Sie daran, da Sie ihn später verwenden werden). Der Hostname ist die URL zu Ihrer GitLab-Instanz. Die IdentifyFile ist der Pfad zu der SSH-Schlüsseldatei, die Sie im ersten Schritt erstellt haben.Zeigen Sie mit SSH auf die Konfigurationsdatei
Oxyum gab uns das Rezept für die Verwendung von Pip mit SSH:
Wir müssen es nur ein wenig ändern, damit SSH unseren neuen Bereitstellungsschlüssel verwendet. Dazu zeigen wir SSH auf den Host-Eintrag in der SSH-Konfigurationsdatei. Ersetzen Sie einfach die 'gitlab.mycorp.com' im Befehl durch den Hostnamen, den wir in der SSH-Konfigurationsdatei verwendet haben:
Das Paket sollte jetzt ohne Eingabeaufforderung installiert werden.
Referenz A
Referenz B.
quelle
Bei der Installation von GitHub konnte ich Folgendes verwenden:
Aber da ich pip as ausführen musste,
sudo
funktionierten die SSH-Schlüssel nicht mehr mit GitHub und "git clone" schlug bei "Permission verweigert (publickey)" fehl. Mitgit+https
konnte ich den Befehl als sudo ausführen und GitHub mich nach meinem Benutzer / Passwort fragen lassen.quelle
Sie können eine private Repository-Abhängigkeit auch über die URL git + https: //github.com / ... installieren, indem Sie Anmeldeinformationen (Login und Kennwort oder Bereitstellungstoken) für Curl mit der
.netrc
Datei angeben :quelle
Wenn Sie Abhängigkeiten von einer Anforderungsdatei auf einem CI- Server oder ähnlichem installieren möchten , haben Sie folgende Möglichkeiten:
In meinem Fall habe ich
GIT_USER=gitlab-ci-token
und verwendetGIT_PASS=${CI_JOB_TOKEN}
.Diese Methode hat einen klaren Vorteil. Sie haben eine einzige Anforderungsdatei, die alle Ihre Abhängigkeiten enthält.
quelle
Wenn Sie SSH nicht verwenden möchten, können Sie den Benutzernamen und das Kennwort in die HTTPS-URL einfügen.
Der folgende Code setzt voraus, dass Sie eine Datei mit dem Namen "pass" im Arbeitsverzeichnis haben, die Ihr Passwort enthält.
quelle
Die Lösung von Oxyum ist für diese Antwort in Ordnung. Ich möchte nur darauf hinweisen, dass Sie vorsichtig sein müssen, wenn Sie mit installieren,
sudo
da die Schlüssel auch für root gespeichert werden müssen (zum Beispiel/root/.ssh
).Dann können Sie tippen
quelle
--user
Flag oder eine virtuelle Umgebung.Wenn Sie eine eigene Bibliothek / ein eigenes Paket auf GitHub, GitLab usw. haben, müssen Sie ein Tag hinzufügen, um eine konkrete Version der Bibliothek, z. B. v2.0, festzuschreiben. Anschließend können Sie Ihr Paket installieren:
Das funktioniert bei mir. Andere Lösungen haben bei mir nicht funktioniert.
quelle
Hier ist eine schnelle Methode, die für mich funktioniert hat. Geben Sie das Repo einfach auf und installieren Sie es von Ihrem eigenen GitHub-Konto mit
quelle
Kopieren Sie einfach die Fernbedienung vom ursprünglichen
git clone
Befehl (oder vongit remote -v
). Sie werden so etwas bekommen:Bit Bucket:
git+ssh://[email protected]:your_account/my_pro.git
GitHub:
git+ssh://[email protected]:your_account/my_pro.git
Als nächstes müssen Sie ersetzen
:
mit/
neben dem Domain - Namen.Installieren Sie also mit:
quelle
Sie können es versuchen
ohne
ssh:...
. Das ist für mich in Ordnung.quelle