J'essaie d'installer un package Python à partir d'un référentiel GitHub privé. Pour un référentiel public, je peux émettre la commande suivante qui fonctionne bien:
pip install git+git://github.com/django/django.git
Cependant, si j'essaye ceci pour un dépôt privé:
pip install git+git://github.com/echweb/echweb-utils.git
J'obtiens la sortie suivante:
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 d'authentification. J'ai donc essayé d'utiliser Git + en ssh
espérant que pip utiliserait ma clé publique SSH pour s'authentifier:
pip install git+ssh://github.com/echweb/echweb-utils.git
Cela donne la sortie suivante:
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 réaliser est même possible? Si oui, comment faire?
eval $(ssh-agent); ssh-add ~/.ssh/github_id_rsa
puis exécutez les installations pip en suivant pip.pypa.io/en/stable/reference/pip_install/#gitRéponses:
Vous pouvez utiliser le
git+ssh
schéma URI, mais vous devez définir un nom d'utilisateur:Voyez-vous la
git@
partie dans l'URI?PS: Lisez également sur les clés de déploiement .
PPS: Dans mon installation, le schéma d'URI "git + ssh" ne fonctionne qu'avec des exigences "modifiables":
N'oubliez pas : changez le
:
caractère quigit remote -v
s'imprime en/
caractère avant d'utiliser l'adresse de la télécommande dans lapip
commande:Si vous oubliez, vous obtiendrez cette erreur:
la source
git+ssh://[email protected]/echweb/echweb-utils.git
schéma dans mon fichier d'exigences. J'ai ouvert une nouvelle question ici: stackoverflow.com/questions/18883430/… . Toute aide est la bienvenue.git+ssh://[email protected]/echweb/echweb-utils.git
enrequirements.txt
œuvre aussi, ce qui est génial.pip install git+ssh://[email protected]/echweb/echweb-utils.git@branch-name
Comme technique supplémentaire, si vous avez cloné localement le référentiel privé, vous pouvez faire:
De façon plus moderne, vous pouvez simplement le faire (et la
-e
volonté signifie que vous n'avez pas à valider les modifications avant qu'elles ne soient reflétées):la source
Vous pouvez le faire directement avec l'URL HTTPS comme ceci:
Cela fonctionne également simplement en ajoutant cette ligne dans le fichier requirements.txt dans un projet Django , par exemple.
la source
Il fonctionne également avec Bitbucket :
Pip utilisera vos clés SSH dans ce cas.
la source
La syntaxe du fichier d'exigences est donnée ici:
https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format
Ainsi, par exemple, utilisez:
si vous voulez que la source reste après l'installation.
Ou juste
si vous voulez juste qu'il soit installé.
la source
J'ai trouvé qu'il était beaucoup plus facile d'utiliser des jetons que des clés SSH. Je n'ai pas pu trouver beaucoup de bonne documentation à ce sujet, donc je suis tombé sur cette solution principalement par essais et erreurs. De plus, l'installation à partir de pip et setuptools présente quelques différences subtiles; mais cette façon devrait fonctionner pour les deux.
GitHub n'offre pas (actuellement, en août 2016) un moyen facile d'obtenir le zip / tarball des référentiels privés. Vous devez donc pointer setuptools pour indiquer à setuptools que vous pointez vers un référentiel Git:
Quelques notes ici:
0
) à la fin du lien, même s'il n'y a pas de paquet sur PyPI . Ce doit être un nombre réel, pas un mot.git+
pour dire à setuptools de cloner le référentiel, plutôt que de pointer un zip / tarballversion
peut être une branche, une balise ou un hachage de validation--process-dependency-links
si l'installation à partir de pipla source
setup.py
ne doit pas contenir de dépendances concrètes, seulement des dépendances abstraites. Ceci spécifie une dépendance concrète sursetup.py
.J'ai trouvé un moyen de «pip installer» automatiquement un référentiel privé GitLab qui ne nécessite aucune invite de mot de passe. Cette approche utilise GitLab "Deploy Keys" et un fichier de configuration SSH, vous pouvez donc déployer en utilisant des clés autres que vos clés SSH personnelles (dans mon cas, pour une utilisation par un 'bot). Peut-être qu'une bonne âme peut vérifier en utilisant GitHub.
Créez une nouvelle clé SSH:
Le fichier doit apparaître sous la forme
~/.ssh/GitLab_Robot_Deploy_Key
et~/.ssh/GitLab_Robot_Deploy_Key.pub
.Copiez et collez le contenu du
~/.ssh/GitLab_Robot_Deploy_Key.pub
fichier dans la boîte de dialogue "Déployer les clés" de GitLab.Testez la nouvelle clé de déploiement
La commande suivante indique à SSH d'utiliser votre nouvelle clé de déploiement pour configurer la connexion. En cas de succès, vous devriez obtenir le message: "Bienvenue dans GitLab, UserName!"
Créez le fichier de configuration SSH
Ensuite, utilisez un éditeur pour créer un
~/.ssh/config
fichier. Ajoutez le contenu suivant. La valeur 'Host' peut être tout ce que vous voulez (souvenez-vous-en, car vous l'utiliserez plus tard). HostName est l'URL de votre instance GitLab. IdentifyFile est le chemin d'accès au fichier de clé SSH que vous avez créé à la première étape.Pointez SSH vers le fichier de configuration
oxyum nous a donné la recette pour utiliser pip avec SSH:
Nous avons juste besoin de le modifier un peu pour que SSH utilise notre nouvelle clé de déploiement. Nous faisons cela en pointant SSH vers l'entrée Host dans le fichier de configuration SSH. Remplacez simplement 'gitlab.mycorp.com' dans la commande par le nom d'hôte que nous avons utilisé dans le fichier de configuration SSH:
Le package doit maintenant être installé sans aucune invite de mot de passe.
Référence A
Référence B
la source
Lors de l'installation à partir de GitHub, j'ai pu utiliser:
Mais, puisque j'ai dû exécuter pip as
sudo
, les clés SSH ne fonctionnaient plus avec GitHub, et "git clone" a échoué sur "Autorisation refusée (publickey)". L'utilisationgit+https
m'a permis d'exécuter la commande en tant que sudo, et que GitHub me demande mon utilisateur / mot de passe.la source
Vous pouvez également installer une dépendance de référentiel privé via git + https: //github.com / ... URL en fournissant des informations de connexion (login et mot de passe, ou déployer un jeton) pour curl avec le
.netrc
fichier:la source
Si vous souhaitez installer des dépendances à partir d'un fichier d'exigences sur un serveur CI ou similaire, vous pouvez le faire:
Dans mon cas, j'ai utilisé
GIT_USER=gitlab-ci-token
etGIT_PASS=${CI_JOB_TOKEN}
.Cette méthode présente un net avantage. Vous disposez d'un fichier d'exigences unique qui contient toutes vos dépendances.
la source
Si vous ne souhaitez pas utiliser SSH, vous pouvez ajouter le nom d'utilisateur et le mot de passe dans l'URL HTTPS.
Le code ci-dessous suppose que vous avez un fichier appelé "pass" dans le répertoire de travail qui contient votre mot de passe.
la source
la solution d'oxyum est OK pour cette réponse. Je veux juste souligner que vous devez être prudent si vous installez à l'aide de
sudo
car les clés doivent également être stockées pour root (par exemple,/root/.ssh
).Ensuite, vous pouvez taper
la source
--user
drapeau ou un virtualenv.Si vous avez votre propre bibliothèque / package sur GitHub, GitLab, etc., vous devez ajouter une balise pour valider avec une version concrète de la bibliothèque, par exemple, v2.0, puis vous pouvez installer votre package:
Cela fonctionne pour moi. D'autres solutions n'ont pas fonctionné pour moi.
la source
Voici une méthode rapide qui a fonctionné pour moi. Forkez simplement le dépôt et installez-le à partir de votre propre compte GitHub avec
la source
Copiez simplement la télécommande depuis la
git clone
commande d' origine (ou depuisgit remote -v
). Vous obtiendrez quelque chose comme ceci:Bitbucket:
git+ssh://[email protected]:your_account/my_pro.git
GitHub:
git+ssh://[email protected]:your_account/my_pro.git
Ensuite, vous devez remplacer
:
par à/
côté du nom de domaine.Installez donc en utilisant:
la source
Vous pouvez essayer
sans pour autant
ssh:...
. Ça marche pour moi.la source