549 votes

Est-il possible d'utiliser pip pour installer un paquet à partir d'un dépôt GitHub privé ?

J'essaie d'installer un paquet Python à partir d'un dépôt GitHub privé. Pour un dépôt public, je peux utiliser la commande suivante qui fonctionne bien :

pip install git+git://github.com/django/django.git

Cependant, si j'essaie ceci pour un dépôt privé :

pip install git+git://github.com/echweb/echweb-utils.git

J'obtiens le résultat suivant :

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

Je suppose que c'est parce que j'essaie d'accéder à un référentiel privé sans fournir aucune authentification. J'ai donc essayé d'utiliser Git + ssh en espérant que Pip utilise ma clé publique SSH pour s'authentifier :

pip install git+ssh://github.com/echweb/echweb-utils.git

Cela donne le résultat suivant :

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

Est-ce que ce que j'essaie de faire est possible ? Si oui, comment puis-je le faire ?

4 votes

Ce n'est certainement pas la bonne réponse, mais cloner manuellement le dépôt et faire pointer pip vers localhost au lieu de github vous permettra de surmonter ce problème si vous essayez simplement d'être productif.

3 votes

@nmicheals C'est ce que j'ai fait jusqu'à présent, mais j'ai besoin de mettre cela dans des fichiers d'exigences pour le déploiement sur de nombreux sites web, tous avec des virtualenvs séparés.

0 votes

Juste pour être sûr : vous avez déjà configuré le support des clés ssh sur github, n'est-ce pas ? Si cela ne fonctionne pas.... Avez-vous essayé d'utiliser git+git://user:pass@github.com/.... comme URI ?

594voto

oxyum Points 1047

Vous pouvez utiliser le git+ssh URI, mais vous doit définir un nom d'utilisateur. Remarquez le git@ dans l'URI :

pip install git+ssh://git@github.com/echweb/echweb-utils.git

Lisez aussi les clés de déploiement .

PS : Dans mon installation, le schéma URI "git+ssh" ne fonctionne qu'avec les exigences "modifiables" :

pip install -e URI#egg=EggName

Souvenez-vous de : Modifier le : caractère qui git remote -v imprime dans un / avant d'utiliser l'adresse de la télécommande dans le champ pip commandement :

$ git remote -v
origin  git@github.com:echweb/echweb-utils.git (fetch)
#                     ^ change this to a '/' character

Si vous oubliez, vous obtiendrez cette erreur :

ssh: Could not resolve hostname github.com:echweb:
         nodename nor servname provided, or not known

7 votes

Merci pour ça, il me manquait juste la partie git@. Par ailleurs, la commande 'pip install git+ssh://git@github.com/echweb/echweb-utils.git' a fonctionné, je n'avais pas besoin de l'option -e.

4 votes

Vous pouvez également utiliser un fichier .ssh/config pour définir le nom d'utilisateur approprié.

3 votes

Cela fonctionnait pour moi, mais plus maintenant, j'utilise même la bonne méthode de calcul. git+ssh://git@github.com/echweb/echweb-utils.git dans mon fichier d'exigences. J'ai ouvert une nouvelle question ici : stackoverflow.com/questions/18883430/ . Toute aide serait la bienvenue.

100voto

Scott Stafford Points 13161

Comme technique supplémentaire, si vous avez le référentiel privé cloné localement, vous pouvez le faire :

pip install git+file://c:/repo/directory

De manière plus moderne, vous pouvez simplement faire cela (et la fonction -e signifie que vous n'avez pas à valider les modifications avant qu'elles ne soient prises en compte) :

pip install -e C:\repo\directory

15 votes

Cela a été très utile. Apparemment, les modifications locales doivent être git-commit avant de pouvoir être installées via pip.

7 votes

C'est vrai - il les tire du dépôt git (dans .git), PAS des copies de travail des fichiers.

54voto

danigosa Points 71

Vous pouvez le faire directement avec l'URL HTTPS comme ceci :

pip install git+https://github.com/username/repo.git

Cela fonctionne également en ajoutant simplement cette ligne dans le fichier requirements.txt dans un fichier de type Django par exemple.

67 votes

Pour les dépôts privés, cependant, cela déclenchera une demande de nom d'utilisateur/mot de passe sur la console, ce qui n'est probablement pas ce que vous voulez.

44voto

gnrfan Points 7647

Il fonctionne également avec Bitbucket :

pip install git+ssh://git@bitbucket.org/username/projectname.git

Pip utilisera vos clés SSH dans ce cas.

18voto

Rachel Points 636

La syntaxe du fichier d'exigences est donnée ici :

https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format

Donc, par exemple, utilisez :

-e git+http://github.com/rwillmer/django-behave#egg=django-behave

si vous voulez que la source reste en place après l'installation.

Ou juste

git+http://github.com/rwillmer/django-behave#egg=django-behave

si vous voulez juste qu'il soit installé.

0 votes

L'URL pour la syntaxe du fichier des exigences a changé. La nouvelle URL est la suivante : pip.pypa.io/en/latest/reference/

0 votes

¿Es el egg une exigence stricte ? J'essaie d'installer par ssh un paquet python privé avec une clé de déploiement mais je reçois toujours la réponse suivante ERROR: Command errored out with exit status 128 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X