Configuración para que la instalación de pip pueda funcionar desde github

226

Nos gustaría usar pip con github para instalar paquetes privados en nuestros servidores de producción. Esta pregunta se refiere a lo que debe estar en el repositorio de github para que la instalación sea exitosa.

Asumiendo la siguiente línea de comando (que autentica muy bien e intenta instalar):

pip install git+ssh://git@github.com/BlahCo/search/tree/prod_release_branch/ProductName

¿Qué necesita residir en ProductName? ¿Es el contenido de lo que normalmente estaría en el archivo tar después de ejecutar setup.py con la opción sdist, o es el archivo tar.gz real u otra cosa?

Pregunto aquí porque he probado varias variaciones y no puedo hacer que funcione. Cualquier ayuda apreciada.

ccgillett
fuente

Respuestas:

290

Necesita el paquete completo de Python, con un setup.pyarchivo.

Un paquete llamado foosería:

foo # the installable package
├── foo
   ├── __init__.py
   └── bar.py
└── setup.py

E instalar desde github como:

$ pip install git+https://github.com/myuser/foo.git@v123
or
$ pip install git+https://github.com/myuser/foo.git@newbranch

Más información en https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

Hugo Tavares
fuente
3
Lo anterior funciona, muchas gracias. Pero, ¿qué pasa si tengo lanzamientos en un subdirectorio dentro de un repositorio, por lo que en lugar de foo.git estoy buscando foo / releases / ProductVer. ¿Es eso posible y si es así cómo? ¡Muchas gracias por la ayuda!
ccgillett
44
No, no es posible. pip solo se instala desde el directorio del repositorio raíz, al menos para git. No sé cómo se comporta la subversión ...
Hugo Tavares
3
Si desea hacer esto a través de ssh y repositorios privados, esta es una publicación sobre cómo hacerlo
Jonathan
¿Por qué no pasaste la -eopción (modo editable) a pip?
Amelio Vazquez-Reina
14
Aquí está el nuevo esquema de URL: pip install git+https://github.com/pypa/pip.git Fuente: pip Github repo
aboutaaron
111

Tuve un problema similar cuando tuve que instalar desde el repositorio de github, pero no quería instalar git, etc.

La forma más sencilla de hacerlo es usar el archivo zip del paquete. Añadir /zipball/mastera la URL del repositorio:

    $ pip install https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Downloading/unpacking https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
  Downloading master
  Running setup.py egg_info for package from https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Installing collected packages: django-debug-toolbar-mongo
  Running setup.py install for django-debug-toolbar-mongo
Successfully installed django-debug-toolbar-mongo
Cleaning up...

De esta manera, hará que pip funcione con repositorios de origen de github.

Dmitry
fuente
2
Esta es la única respuesta que también funciona en Windows
divenex
¿Cómo se puede hacer esto con repositorios privados? (como pregunta la pregunta)
Rodrigo E. Principe
29

Si desea utilizar el requirements.txtarchivo, necesitará gity algo como la entrada a continuación para buscar anónimamente la rama maestra en su requirements.txt.

Para instalación regular:

git+git://github.com/celery/django-celery.git

Para instalación " editable ":

-e git://github.com/celery/django-celery.git#egg=django-celery

El modo editable descarga el código fuente del proyecto ./srcen el directorio actual. Permite pip freezegenerar la ubicación correcta de github del paquete.

wieczorek1990
fuente
3
¿De dónde vienen los nombres de los huevos? que no se puede cargar el paquete de Django después de reemplazar el paquete PIP con github de reporto
holms
@holms Buscar nombre en setup.py
wieczorek1990
¿Qué es #egg=django-celery? ¿Es eso un marcador de posición?
mejora
@enchance Es el nombre del paquete.
wieczorek1990
13

Clone el repositorio de destino de la misma manera que clona cualquier otro proyecto:

git clone git@github.com:myuser/foo.git

Luego instálelo en modo de desarrollo:

cd foo
pip install -e .

Puede cambiar cualquier cosa que desee y cada código que use el foopaquete usará código modificado.

Hay 2 beneficios de esta solución:

  1. Puede instalar el paquete en el directorio de proyectos de su hogar.
  2. El paquete incluye .gitdir, por lo que es un repositorio Git normal. Puede empujar a su tenedor de inmediato.
avalancha
fuente
2
Puedo testificar que esta solución es mágica. En mi caso, quería piratear pip, así que cloné el piprepositorio, creé un virtualenv, lo activé y lo hice pip install -e .. Entonces el pipen el virtualenv estaba en modo de desarrollo! Estoy impresionado de que esto funcione incluso con el administrador de paquetes en sí.
Radon Rosborough
¡Esto es genial! Noté que cuando instalé usando este método y luego lo ejecuté pip list, el paquete en cuestión tiene referencias a la rama Git y la ruta absoluta desde la que se instaló. ¿Mantiene alguna referencia a ellos o se puede eliminar la fuente?
MadPhysicist
0

puedes probar de esta manera en Colab

!git clone https://github.com/UKPLab/sentence-transformers.git
!pip install -e /content/sentence-transformers
import sentence_transformers
Shaina Raza
fuente