Es posible el uso de pip para instalar un paquete de un repositorio de GitHub?

Como sugiere el título estoy tratando de instalar un paquete de Python de un repositorio de GitHub. Para un repositorio público que pueda emitir el siguiente comando, que funciona bien:

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

Sin embargo, si lo intento para un repositorio privado:

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

Obtengo 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 es debido a que estoy tratando de acceder a un repositorio privado sin proporcionar ningún tipo de autenticación. Por tanto, he tratado de usar Git + ssh con la esperanza de que pip usar 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 lo que estoy tratando de lograr incluso posible? Si es así, ¿cómo puedo hacerlo?

  • Ciertamente no es la respuesta correcta, pero la clonación de la repo de forma manual, a continuación, señalando pip para localhost en lugar de github se conseguirán más allá de esto, si usted está tratando de ser productivo.
  • Eso es lo que he hecho hasta ahora, pero tengo que poner esto en los requisitos de los archivos para su implementación a través de muchos sitios web de todos con independiente virtualenvs.
  • Sólo a él: ya ha configurado ssh soporte clave en github, ¿verdad? Si que definitivamente no funciona…. ¿Has probado a usar git+git://user:[email protected]/…. el URI?
  • Trate de usar eval $(ssh-agent); ssh-add ~/.ssh/github_id_rsa y, a continuación, ejecutar el pip se instala siguiente pip.pypa.io/es/estable/referencia/pip_install/#git

15 Kommentare

  1. 331

    Puede utilizar git+ssh esquema de URI, pero DEBE establecer nombre de usuario:

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

    Ver [email protected] parte en URI?

    PS: También leer acerca de implementar las teclas.

    PPS: En mi instalación de la «git+ssh» esquema de URI sólo funciona con «editable» requisitos:

    pip install -e URI#egg=EggName

    Recordar: Cambiar el : personaje que git remote -v imprime una / personaje antes de utilizar el mando a distancia de la dirección en la pip comando:

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

    Si se le olvida, obtendrá este error:

    ssh: Could not resolve hostname github.com:echweb:
             nodename nor servname provided, or not known
    • Gracias por eso, yo estaba solo falta que el [email protected] parte. Por cierto el comando ‘pip install git+ssh://[email protected]/echweb/echweb-utils.git» se trabajó, yo no requieren el modificador-e.
    • usted también puede usar una .ssh/config archivo para establecer el nombre de usuario correcto
    • Esto solía trabajar para mí, pero ahora no, me siento aún la correcta utilización de la git+ssh://[email protected]/echweb/echweb-utils.git esquema en mis requisitos de archivo. He abierto una nueva pregunta aquí: stackoverflow.com/questions/18883430/…. Cualquier ayuda sería genial.
    • Esto es lo que tengo que hacer con nuestro en-casa (corporativo) de github de implementación. Es el «[email protected]» parte documentado en ninguna parte? Pasé algún tiempo en busca antes de que me enteré de tu post; definitivamente no parece ser una parte de pip documentación. Tengo curiosidad. Y gracias!
    • No pip específica, por lo que no es parte de pip doc. Yo lo sé porque tener un sólido conocimiento en unix/ssh/git y la instalación de repo hostings en pre-github(y pre-git) de la época. «[email protected]» parte se puede encontrar en github «SSH clon campo» URL de cualquier repo en los que tenga acceso de escritura.
    • es parte de la URL. Las url son estándar, y no pip-específicos: tools.ietf.org/html/rfc3986
    • Qué importa el nombre de usuario que utiliza?
    • Sí, usted debe usar sólo «git» nombre de usuario para el acceso ssh a github y la mayoría de los otros VCS hostings. Todos los archivos guardados en virtud de un usuario del sistema (git) y permisos administrado, no por el sistema operativo, pero por software internamente. Para distinguir entre los usuarios de especial ssh-demonio utiliza la clave, que se utiliza para la autenticación.
    • Perfecto. Poner git+ssh://[email protected]/echweb/echweb-utils.git en requirements.txt trabaja demasiado, que es impresionante.
    • Si usted necesita para ejecutar desde un script (por ejemplo: para la implementación de…), puede especificar que la clave SSH para su uso con la variable de entorno GIT_SSH_COMMAND="ssh -i ~/.ssh/my-deploy-key"
    • «No se pudo detectar requisito nombre, especifique un con #huevo=»
    • Si desea instalar a partir de una rama específica: pip install git+ssh://[email protected]/echweb/[email protected]

  2. 70

    Como una técnica adicional, si tienes el privado repositorio clonado a nivel local, usted puede hacer:

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

    EDIT: Más modernamente, usted puede hacer esto (y la -e significa que usted no tiene que confirmar los cambios antes de que se reflejó):

    pip install -e C:\repo\directory
    • Esto fue muy útil. Al parecer, los cambios locales tienen que ser git commit había antes de que puede ser instalado a través de pip.
    • Que cierto es tirando de él desde el repositorio git (en .git), NO las copias de trabajo de los archivos.
  3. 47

    Puedes hacerlo directamente con el HTTPS en la dirección URL como esta:

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

    Esto también funciona añadiendo que la línea en la requirements.txt en un proyecto de django, por ejemplo.

    • Privado de los repos, sin embargo, esto va a desencadenar un nombre de usuario/contraseña de un mensaje en la consola, que es probablemente lo que usted desea.
  4. 14

    La sintaxis de los requisitos de archivo está aquí:

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

    Así, por ejemplo:

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

    si quieres la fuente a quedarse después de la instalación

    o simplemente

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

    si sólo desea que se instale.

  5. 14

    Se me ocurrió una manera de automágicamente «pip install’ un GitLab repositorio privado que no requiere de solicitud de contraseña. Este enfoque utiliza GitLab «Implementar las Teclas» y un archivo de configuración de SSH así que usted puede implementar mediante el uso de teclas de personal de claves SSH (en mi caso, para su uso por un ‘bot). Quizás algún alma caritativa puede verificar utilizando 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

    Copiar y pegar el contenido de la ~/.ssh/GitLab_Robot_Deploy_Key.pub archivo en el GitLab «implementación de Teclas» cuadro de diálogo.

    Probar el Nuevo Implementar Clave

    El siguiente comando le dice a SSH para usar su nuevo implementar clave para establecer la conexión. En caso de éxito, usted debe de recibir el mensaje: «Bienvenido a GitLab, el nombre de Usuario!»

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

    Crear el Archivo de configuración de SSH

    Siguiente, utilice un editor para crear un ~/.ssh/config archivo. Agregue el siguiente contenido. El ‘Host’ valor puede ser cualquier cosa que desee (sólo recuerde, porque vas a usar más adelante). El nombre de host es la dirección URL de su GitLab instancia. El IdentifyFile es la ruta de acceso de la clave SSH archivo creado en el primer paso.

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

    Punto de SSH para el archivo de configuración

    @oxyum nos dio la receta para el uso de pip con SSH:

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

    Tan sólo tenemos que modificar un poco para hacer SSH utilizar nuestro nuevo Implementar Clave. Hacemos que apunta SSH a la entrada de Host en el archivo de configuración de SSH. Basta con sustituir el ‘gitlab.mycorp.com» en el comando para el nombre de Host que hemos utilizado en el archivo de configuración de SSH:

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

    El paquete ahora debe instalar con ningún indicador de solicitud de contraseña.

    Hacer Referencia A Un

    Referencia B

  6. 13

    Me pareció mucho más fácil el uso de fichas de claves SSH. No pude encontrar mucha buena documentación sobre este, por lo que llegó a través de esta solución, principalmente a través de la prueba & error. Además, la instalación de la pip & setuptools tienen algunas diferencias sutiles; pero de esta forma debe funcionar para ambos.

    GitHub no (en la actualidad, a partir de agosto de 2016), ofrecen una manera fácil de obtener el zip /tar privado de repos. Por lo que necesita a punto de setuptools decir setuptools que usted está 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í:

    • Privado repos, usted necesita autenticarse con GitHub; la forma más sencilla que he encontrado es crear un token de oauth, caída que en su entorno, y, a continuación, incluir la dirección URL de
    • Deberá incluir algunos número de versión (aquí es 0) en el extremo del enlace, incluso si no hay ningún paquete en PyPI. Esto tiene que ser un número real, no una palabra.
    • Deberá anteponer con git+ decir setuptools es clonar el repo, en lugar de apuntar en un zip /tar
    • version puede ser una rama, una etiqueta, o un commit hash
    • Usted necesidad de proporcionar a --process-dependency-links si la instalación de la pip
    • Nota setup.py no debe contener el hormigón dependencias, sólo abstractos. Esta es la especificación de un hormigón de dependencia en setup.py.
    • Con el lanzamiento de pip versión 19.0, –proceso de dependencia de los enlaces opción está obsoleta.
  7. 7

    Cuando estaba instalando desde github yo era capaz de utilizar:

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

    PERO, ya que he tenido para ejecutar el pip como sudo, las Llaves SSH no fueron a trabajar con github más, «git clone» error de «Permiso denegado (clavepublica)». El uso de git+https me permitió ejecutar el comando sudo, y han github me pregunta mi usuario/contraseña.

    sudo pip install git+https://github.com/<username>/<projectname>.git#egg=<eggname>
    • Hacer otras cuentas de usuario necesita acceder a su proyecto? Si no, has descubierto nerdwaller sugerencia?
  8. 6

    También puede instalar un privado repo de dependencia a través de git+https://github.com/… URL por proporcionar credenciales de inicio de sesión (login y password, o implementar token) para curl con el .netrc de archivo:

    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"
  9. 2

    Si quieres instalar las dependencias de los requisitos de archivo dentro de un servidor CI o similar, usted puede hacer esto:

    git config --global credential.helper 'cache'
    echo "protocol=https
    host=example.com
    username=${GIT_USER}
    password=${GIT_PASS}
    " | git credential approve
    pip install -r requirements.txt

    En mi caso, he utilizado GIT_USER=gitlab-ci-token y GIT_PASS=${CI_JOB_TOKEN}.

    Este método tiene una ventaja clara, tiene una sola requisitos de archivo, que contiene todas sus dependencias.

  10. 0

    oxyum del solución es aceptar para esta respuesta, sólo quiero señalar que usted necesita tener cuidado si usted está instalando el uso de sudo como las llaves deben ser almacenados para su raíz (por ejemplo,/root/.ssh).

    A continuación, puede escribir

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

    • Solución fácil: no instalar con sudo. En lugar de utilizar el --user bandera o un virtualenv.
  11. 0

    Si usted tiene su propia biblioteca/paquete en github/gitlab etc, usted tiene que agregar etiquetas para comprometerse con el hormigón de la versión de la biblioteca por ejemplo, v2.0 entonces usted puede instalar el paquete de

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

    Esto funciona para mí. Otras soluciones que no han trabajado para mí.

  12. 0

    Si usted no desea utilizar ssh, se podría añadir el nombre de usuario y contraseña en la dirección url https.

    El código siguiente se supone que tiene un archivo llamado «pase» en el directorio de trabajo que contiene la contraseña.

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea