paquetes librerias instalar entorno crear python git github pip

librerias - pip python



¿Es posible usar pip para instalar un paquete desde un repositorio privado de github? (13)

Como técnica adicional, si tiene el repositorio privado clonado localmente, puede hacer:

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

EDITAR: Más moderno, puede hacer esto (y -e significará que no tiene que realizar cambios antes de que se reflejen):

pip install -e C:/repo/directory

Como el título sugiere, estoy tratando de instalar un paquete 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 intentando acceder a un repositorio privado sin proporcionar ninguna autenticación. Por lo tanto, traté de 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

¿Alguien sabe si lo que estoy tratando de lograr es incluso posible? Si es así, ¿puedes decirme cómo?


Cuando estaba instalando desde github pude usar:

pip install git+ssh://[email protected]/<username>/<projectname>.git#egg=<eggname>

PERO, ya que tuve que ejecutar pip como sudo , las claves SSH ya no funcionaban con github, el "clon git" falló en "Permiso denegado (publickey)". El uso de git+https me permitió ejecutar el comando como sudo, y hacer que github me pregunte mi usuario / contraseña.

sudo pip install git+https://github.com/<username>/<projectname>.git#egg=<eggname>


Descubrí una forma de "instalar" de forma automática un repositorio privado de GitLab que no requiere una solicitud de contraseña. Este enfoque utiliza "Implementar claves" de GitLab y un archivo de configuración SSH para que pueda implementarlo utilizando otras claves que no sean sus claves SSH personales (en mi caso, para uso de un ''bot''). Tal vez alguien con alma amable pueda verificar usando GitHub.

Crear una nueva clave SSH:

ssh-keygen -t rsa -C "GitLab_Robot_Deploy_Key"

El archivo debe aparecer como ~/.ssh/GitLab_Robot_Deploy_Key y ~/.ssh/GitLab_Robot_Deploy_Key.pub

Copie y pegue el contenido del archivo ~/.ssh/GitLab_Robot_Deploy_Key.pub 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!"

ssh -T -i ~/.ssh/GitLab_Robot_Deploy_Key [email protected]

Crear el archivo de configuración SSH

A continuación, use un editor para crear un archivo ~/.ssh/config . Añade los siguientes contenidos. El valor ''Host'' puede ser lo que quieras (solo recuérdalo, porque lo usarás 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.

Host GitLab HostName gitlab.mycorp.com IdentityFile ~/.ssh/GitLab_Robot_Deploy_Key

Apunte SSH al archivo de configuración

@oxyum nos dio la receta para usar pip con SSH:

pip install git+ssh://[email protected]/my_name/my_repo.git

Solo necesitamos modificarlo un poco para que SSH use nuestra nueva clave de implementación. Lo hacemos señalando SSH a la entrada del Host en el archivo de configuración de SSH. Simplemente reemplace ''gitlab.mycorp.com'' en el comando al nombre de host que usamos en el archivo de configuración SSH:

pip install git+ssh://git@GitLab/my_name/my_repo.git

El paquete ahora debe instalarse sin solicitud de contraseña.

Referencia A
Referencia B



Me pareció mucho más fácil usar tokens que las claves SSH. No pude encontrar mucha buena documentación sobre esto, así que encontré esta solución principalmente a través de prueba y error. Además, la instalación desde pip & 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 forma fácil de obtener el zip / tarball de los repositorios privados. Así que debes apuntar a setuptools para decirle a setuptools que estás apuntando a un repositorio git:

from setuptools import setup import os # get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/ github_token = os.environ[''GITHUB_TOKEN''] setup( # ... install_requires=''package'', dependency_links = [ ''git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0'' .format(github_token=github_token, package=package, version=master) ]

Un par de notas aquí:

  • Para repositorios privados, necesita autenticarse con GitHub; La forma más sencilla que encontré es crear un touth outh, colocarlo en su entorno y luego incluirlo con la URL.
  • Debe incluir algún número de versión (aquí hay 0 ) al final del enlace, incluso si no hay un paquete en PyPI. Este tiene que ser un número real, no una palabra.
  • Necesitas comenzar con git+ para decirle a setuptools que es clonar el repositorio, en lugar de apuntar a un zip / tarball.
  • version puede ser una rama, una etiqueta o un hash de confirmación.
  • --process-dependency-links proporcionar --process-dependency-links si se instala desde pip

Puede usar el esquema URI de git+ssh , pero DEBE establecer un nombre de usuario:

pip install git+ssh://[email protected]/echweb/echweb-utils.git

Ver git@ parte en URI?

PS: También lea acerca de las claves de implementación .

PPS: en mi instalación, el esquema URI "git + ssh" funciona solo con los requisitos "editables":

pip install -e URI#egg=EggName

Recuerde : cambie el carácter : que git remote -v imprime en un carácter / antes de usar la dirección del control remoto en el comando pip :

$ git remote -v origin [email protected]:echweb/echweb-utils.git (fetch) ^ change this to a ''/'' character

Si olvida, obtendrá este error:

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


Puedes hacerlo directamente con la URL de HTTPS de esta manera:

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

Esto también funciona simplemente añadiendo esa línea en el archivo Requirements.txt en un proyecto de Django, por ejemplo.


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.

export PASS=$(cat pass) pip install git+https://<username>:[email protected]/echweb/echweb-utils.git


Si tiene su propia biblioteca / paquete en github / gitlab, etc., debe agregar una etiqueta para comprometerse con una versión concreta de la biblioteca, por ejemplo, v2.0, entonces puede instalar su paquete

pip install git+ssh://link/name/[email protected]

Esto funciona para mi Otras soluciones no han funcionado para mí.


También funciona con Bitbucket:

pip install git+ssh://[email protected]/username/projectname.git

Pip utilizará sus claves SSH en este caso.


También puede instalar una dependencia de repo 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 token de implementación) para curl con el archivo .netrc :

echo "machine github.com login ei-grad password mypasswordshouldbehere" > ~/.netrc pip install "git+https://github.com/ei-grad/my_private_repo.git#egg=my_private_repo"


puedes intentar

pip install [email protected]/my_name/my_repo.git

sin ssh: ... eso es trabajo para mi.


oxyum''s solución oxyum''s 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 root (por ejemplo, /root/.ssh ).

Entonces puedes escribir

sudo pip install git+ssh://[email protected]/echweb/echweb-utils.git