Estoy tratando de instalar un paquete de Python desde un repositorio privado de GitHub. Para un repositorio público, puedo emitir el siguiente comando que funciona bien:
pip install git+git://github.com/django/django.git
Sin embargo, si intento esto para un repositorio privado:
pip install git+git://github.com/echweb/echweb-utils.git
Me sale el siguiente resultado:
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
Supongo que esto se debe a que estoy tratando de acceder a un repositorio privado sin proporcionar ninguna autenticación. Por lo tanto, intenté usar Git + ssh
con la esperanza de que pip usara mi clave pública SSH para autenticar:
pip install git+ssh://github.com/echweb/echweb-utils.git
Esto da el siguiente resultado:
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
¿Es posible lo que estoy tratando de lograr? Si es así, ¿cómo puedo hacerlo?
eval $(ssh-agent); ssh-add ~/.ssh/github_id_rsa
y luego ejecute las instalaciones de pip después de pip.pypa.io/en/stable/reference/pip_install/#gitRespuestas:
Puede usar el
git+ssh
esquema URI, pero debe establecer un nombre de usuario:¿Ves la
git@
parte en el URI?PD: Lea también sobre las claves de implementación .
PPS: en mi instalación, el esquema URI "git + ssh" solo funciona con requisitos "editables":
Recuerde : cambie el
:
carácter que segit remote -v
imprime en un/
carácter antes de usar la dirección del control remoto en elpip
comando:Si lo olvida, recibirá este error:
fuente
git+ssh://[email protected]/echweb/echweb-utils.git
esquema correcto en mi archivo de requisitos. Abrí una nueva pregunta aquí: stackoverflow.com/questions/18883430/… . Cualquier ayuda sería genial.git+ssh://[email protected]/echweb/echweb-utils.git
enrequirements.txt
marcha también, lo cual es increíble.pip install git+ssh://[email protected]/echweb/echweb-utils.git@branch-name
Como técnica adicional, si tiene el repositorio privado clonado localmente, puede hacer lo siguiente:
De manera más moderna, puede hacer esto (y
-e
significa que no tendrá que confirmar los cambios antes de que se reflejen):fuente
Puede hacerlo directamente con la URL HTTPS como esta:
Esto también funciona simplemente agregando esa línea en los requisitos.txt en un proyecto de Django , por ejemplo.
fuente
También funciona con Bitbucket :
Pip usará sus claves SSH en este caso.
fuente
La sintaxis para el archivo de requisitos se proporciona aquí:
https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format
Entonces, por ejemplo, use:
si desea que la fuente permanezca después de la instalación.
O solo
si solo quieres que se instale.
fuente
Me resultó mucho más fácil usar tokens que las claves SSH. No pude encontrar mucha documentación buena sobre esto, así que encontré esta solución principalmente a través de prueba y error. Además, la instalación desde pip y setuptools tiene algunas diferencias sutiles; pero de esta manera debería funcionar para ambos.
GitHub no (actualmente, a partir de agosto de 2016) ofrece una manera fácil de obtener el zip / tarball de los repositorios privados. Por lo tanto, debe señalar las herramientas de configuración para indicarle a las herramientas de configuración que está apuntando a un repositorio de Git:
Un par de notas aquí:
0
) al final del enlace, incluso si no hay ningún paquete en PyPI . Esto tiene que ser un número real, no una palabra.git+
Debe prefacio para decirle a setuptools que es para clonar el repositorio, en lugar de apuntar a un zip / tarballversion
puede ser una rama, una etiqueta o un hash de confirmación--process-dependency-links
si se instala desde pipfuente
setup.py
no debe contener dependencias concretas, solo abstractas. Esto especifica una dependencia concreta desetup.py
.Descubrí una manera de 'instalar pip' automáticamente un repositorio privado de GitLab que no requiere solicitud de contraseña. Este enfoque utiliza "Implementar claves" de GitLab y un archivo de configuración SSH, por lo que puede implementar utilizando claves distintas de sus claves SSH personales (en mi caso, para uso de un 'bot). Quizás alguien amable alma pueda verificar usando GitHub.
Cree una nueva clave SSH:
El archivo debería aparecer como
~/.ssh/GitLab_Robot_Deploy_Key
y~/.ssh/GitLab_Robot_Deploy_Key.pub
.Copie y pegue el contenido del
~/.ssh/GitLab_Robot_Deploy_Key.pub
archivo en el cuadro de diálogo "Implementar claves" de GitLab.Probar la nueva clave de implementación
El siguiente comando le dice a SSH que use su nueva clave de implementación para configurar la conexión. En caso de éxito, debería recibir el mensaje: "¡Bienvenido a GitLab, UserName!"
Crear el archivo de configuración SSH
Luego, use un editor para crear un
~/.ssh/config
archivo. Agregue los siguientes contenidos. El valor 'Host' puede ser lo que desee (solo recuérdelo, porque lo usará más adelante). HostName es la URL de su instancia de GitLab. IdentifyFile es la ruta al archivo de clave SSH que creó en el primer paso.Apunte SSH al archivo de configuración
oxyum nos dio la receta para usar pip con SSH:
Solo necesitamos modificarlo un poco para que SSH use nuestra nueva clave de implementación. Hacemos eso apuntando SSH a la entrada del Host en el archivo de configuración SSH. Simplemente reemplace 'gitlab.mycorp.com' en el comando por el nombre de host que usamos en el archivo de configuración SSH:
El paquete ahora debería instalarse sin ninguna solicitud de contraseña.
Referencia A
Referencia B
fuente
Cuando estaba instalando desde GitHub pude usar:
Pero, como tenía que ejecutar pip como
sudo
, las claves SSH ya no funcionaban con GitHub, y "git clone" falló en "Permiso denegado (clave pública)". Usargit+https
me permitió ejecutar el comando como sudo y hacer que GitHub me solicite mi usuario / contraseña.fuente
También puede instalar una dependencia de repositorio privado a través de git + https: //github.com / ... URL proporcionando credenciales de inicio de sesión (inicio de sesión y contraseña, o desplegar token) para curl con el
.netrc
archivo:fuente
Si desea instalar dependencias de un archivo de requisitos dentro de un servidor CI o similar, puede hacer esto:
En mi caso, usé
GIT_USER=gitlab-ci-token
yGIT_PASS=${CI_JOB_TOKEN}
.Este método tiene una clara ventaja. Tiene un único archivo de requisitos que contiene todas sus dependencias.
fuente
Si no desea utilizar SSH, puede agregar el nombre de usuario y la contraseña en la URL HTTPS.
El siguiente código supone que tiene un archivo llamado "pass" en el directorio de trabajo que contiene su contraseña.
fuente
La solución de oxyum está bien para esta respuesta. Solo quiero señalar que debe tener cuidado si está instalando usando,
sudo
ya que las claves también deben almacenarse para la raíz (por ejemplo,/root/.ssh
).Entonces puedes escribir
fuente
--user
bandera o un virtualenv.Si tiene su propia biblioteca / paquete en GitHub, GitLab, etc., debe agregar una etiqueta para confirmar con una versión concreta de la biblioteca, por ejemplo, v2.0, y luego puede instalar su paquete:
Esto funciona para mi. Otras soluciones no me han funcionado.
fuente
Aquí hay un método rápido que funcionó para mí. Simplemente bifurca el repositorio e instálalo desde tu propia cuenta de GitHub con
fuente
Simplemente copie el control remoto desde el
git clone
comando original (o desdegit remote -v
). Obtendrás algo como esto:Bitbucket:
git+ssh://[email protected]:your_account/my_pro.git
GitHub:
git+ssh://[email protected]:your_account/my_pro.git
A continuación, debe reemplazar
:
con al/
lado del nombre de dominio.Así que instale usando:
fuente
Puedes intentar
sin
ssh:...
. Funciona para mi.fuente