pip install desde git repo branch

686

Intentando pipinstalar una rama específica del repositorio. Google me dice que

pip install git + https://github.com/user/repo.git@branch

El nombre de la sucursal es issue/34/oscar-0.6así, pip install https://github.com/tangentlabs/django-oscar-paypal.git@/issue/34/oscar-0.6pero devuelve un 404.

¿Cómo instalo esta rama?

goh
fuente

Respuestas:

932

Anteponga el prefijo de la URL git+(consulte el soporte de VCS ):

pip install git+https://github.com/tangentlabs/django-oscar-paypal.git@issue/34/oscar-0.6

Y especifique el nombre de la rama sin el inicio /.

falsetru
fuente
55
¿Es obligatorio especificar una rama o un compromiso @?
eugene
99
@eugene, No, @y las partes posteriores son opcionales.
falsetru
3
Oye, ahora no es necesario poner tree, esto genera un error.
SalahAdDin
66
Es para sucursales, por ejemplo:pip install -U git+https://github.com/danreeves/[email protected]
SalahAdDin
3
También puede poner algo como esto git+https://github.com/adiralashiva8/[email protected]en su require.txt y luego instalarlo con pip install -r requirements.txt. Esto instalará Tag v3.1.4 desde la rama maestra.
Wlad
311

Usar pip con git + para clonar un repositorio puede ser extremadamente lento (pruebe con https://github.com/django/django@stable/1.6.x, por ejemplo, tomará unos minutos). Lo más rápido que he encontrado, que funciona con GitHub y BitBucket, es:

pip install https://github.com/user/repository/archive/branch.zip

que se convierte para django master:

pip install https://github.com/django/django/archive/master.zip

para django stable / 1.7.x:

pip install https://github.com/django/django/archive/stable/1.7.x.zip

Con BitBucket se trata del mismo patrón predecible:

pip install https://bitbucket.org/izi/django-admin-tools/get/default.zip

Aquí, la rama maestra generalmente se denomina predeterminada. Esto hará que sus requerimientos .txt se instalen mucho más rápido.

Algunas otras respuestas mencionan variaciones requeridas al colocar el paquete que se instalará en su requirements.txt. Tenga en cuenta que con esta sintaxis de archivo, el inicio -ey el final no#egg=blah-blah son obligatorios, y simplemente puede pegar la URL, de modo que su require.txt se vea así:

https://github.com/user/repository/archive/branch.zip
Steve K
fuente
29
Nota: a partir de Django 1.9, Django se entrega con un archivo que tiene un nombre de archivo unicode . El extractor de cremallera utilizado por pip se ahoga en eso. Una solución fácil es reemplazar .zipcon .tar.gz, como funciona el extractor de alquitrán.
spectras
44
Me pregunto si pip podría pasar --depth 0al clonar para hacerlo más eficiente (no se necesita todo el historial de git para instalar una instantánea para pip). git-scm.com/docs/git-clone
cs01
66
¡Esto también funciona para commit hashes! pip install https://github.com/django/django/archive/ebaa08b.zip
Fush
44
Gracias por señalar la diferencia de velocidad. No los probé ni los comparé, pero creo que la diferencia de velocidad existe, porque la instalación desde una sucursal aún resultaría en la descarga de todo el historial de repositorios, mientras que la instalación desde un .zip(o .tar.gz) resultaría en la descarga de una instantánea del repositorio.
RayLuo
¿Es posible instalar extras usando esta sintaxis? Por ejemplo, estoy tratando de instalar github.com/apache/incubator-airflow @ master (el paquete normal de PyPI es apache-airflow) para trabajar con una versión inédita. Me gustaría convertir la llamada pip install apache-airflow[crypto, slack]para instalar estos extras con la versión de archivo. Lo intenté pip install https://github.com/apache/incubator-airflow/archive/master.zip[crypto, slack]pero esto rompe la URL y la instalación.
Taylor Edmiston
67

Instrucciones para instalar desde un repositorio privado usando credenciales ssh :

$ pip install git+ssh://git@github.com/myuser/foo.git@my_version
Jaakko
fuente
51

Solo para agregar un extra, si desea instalarlo en su archivo pip, se puede agregar así:

-e git+https://github.com/tangentlabs/django-oscar-paypal.git@issue/34/oscar-0.6#egg=django-oscar-paypal

Sin embargo, se guardará como un huevo.

Hassek
fuente
55
Es mejor usarlo sin el -e. Ver: stackoverflow.com/a/34518202/451710
Eyal Levin el
44
Gracias por el comentario, muy interesante. Creo que las personas tienden a usar la -ebandera para evitar cualquier posible conflicto con un paquete ya existente. Supongo que es una cuestión de elección
Hassek el
44
Y si quieres "extras", agrégalos en el fragmento, así:-e git+https://github.com/tangentlabs/django-oscar-paypal.git@issue/34/oscar-0.6#egg=django-oscar-paypal[PDF]
ankostis
Tenga en cuenta que en -erealidad no parece ser necesario.
Taylor Edmiston
Por alguna razón, no funciona para mí sin el-e
Kurt Bourbaki
4

Usaste el procedimiento de instalación de archivos egg. Este procedimiento admite la instalación de más de git, git+http, git+https, git+ssh, git+gity git+file. Algunos de estos son mencionados.

Es bueno que pueda usar ramas, etiquetas o hash para instalar.

@Steve_K señaló que la instalación puede ser lenta con "git +" y propuso la instalación a través del archivo zip:

pip install https://github.com/user/repository/archive/branch.zip

Alternativamente, le sugiero que instale usando el .whlarchivo si existe.

pip install https://github.com/user/repository/archive/branch.whl

Es un formato bastante nuevo, más nuevo que los archivos de huevo. Requiere ruedas y herramientas de configuración> = 0.8 paquetes. Puedes encontrar más aquí .

prosti
fuente
1
La pregunta no se especifica a github. La noción de archive / branch.zip es específica solo de github.
Jorge Leitao
0

Esto funcionó a las mil maravillas:

pip3 install git+https://github.com/deepak1725/fabric8-analytics-worker.git@develop

Dónde :

desarrollar: Rama

fabric8-analytics-worker.git: Repo

deepak1725: usuario

Deepak Sharma
fuente