Por que # egg = foo al instalar pip desde git repo

95

Cuando hago un "pip install -e ..." para instalar desde un repositorio de git, tengo que especificar # egg = somename o pip quejas. Por ejemplo:

pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app

¿Cuál es el significado de esta cuerda de "huevo"?

Lorin Hochstein
fuente
1
Esta parte de la pip installdocumentación habla #egg=name, pero no da una respuesta clara.
Christian Long

Respuestas:

35

per pip install -h la cadena "egg" es el directorio que se extrae como parte de la instalación

Will Ayd
fuente
12
¿Puede ser este el mismo nombre que el repositorio? ¿Importan los casos?
CMCDragonkai
14
¿"El directorio que se comprueba"? Entonces, ¿ingreso el nombre de la sucursal? ¿Inventar algo?
Chris
2
Si ha creado un paquete Python personalizado, cuando ejecutó setuptools, se project-name.egg-info/top_level.txtdebería haber creado un directorio llamado . Utilice el contenido de este archivo como valor para el eggparámetro.
dspacejs
2
Parece que no puedo averiguar si el egg=...entorno realmente importa. El paquete que estoy instalando tiene varias entradas en el archivo top_level.txt. He experimentado namecomparándolo con el kwarg que usa el script, setup.pypero también con un valor arbitrario. Los resultados parecen ser los mismos de cualquier manera. Tenga en cuenta que estoy instalando usando la pip install https://...sintaxis que no requiere -e.
Taylor Edmiston
7

Tienes que incluir # egg = Package para que pip sepa qué esperar en esa URL. Ver https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

más sobre huevos

Skylar Saveland
fuente
20
¿Qué significa eso "para que pip sepa qué esperar en esa URL"? ¿Hay algo más que #egg que sea válido para agregar a una URL como esa?
Lorin Hochstein
De hecho, me gusta la respuesta de Will del pip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)no estoy seguro de que se use en otro lugar ...
Skylar Saveland
Está clonado pero no instalado :(
holms
6

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support dice:

El componente "nombre del proyecto" del sufijo de la URL "egg = -" es utilizado por pip en su lógica de dependencia para identificar el proyecto antes de la descarga de pip y el análisis de los metadatos. El componente opcional "versión" del nombre del huevo no es funcionalmente importante. Simplemente proporciona una pista legible por humanos sobre qué versión está en uso. Para proyectos donde setup.py no está en la raíz del proyecto, se usa el componente "subdirectorio". El valor del componente "subdirectorio" debe ser una ruta desde la raíz del proyecto hasta donde se encuentra setup.py.

De esto deduzco que el valor del huevo solo se usa para verificaciones de dependencia y, por lo tanto, creo que, por convención, se some-pypi-package-namedebe usar el nombre del paquete (es decir ), no cualquier carpeta contenida (es decir some_pypi_package_name)

Mario
fuente
6

Un huevo es solo un código de Python incluido . En una URL de git, el huevo es el nombre del proyecto. Soporte VCS

Normalmente instalamos paquetes de Python desde Pypi, por lo que especifica SOLO el nombre y la versión del paquete (o asume la última versión si no lo especifica). Luego, Pypi busca qué huevo desea y pip lo instala. pip install celeryinstalaría el último huevo publicado e pip install celery[redis]instalaría un huevo diferente que contiene el mismo paquete de apio y también instalaría los últimos huevos de los paquetes que se enumeran como dependencias para redis en setup.py de apio.

Con las rutas de git y gitlab, usted especifica /{user|group}/{repository}.git@{tag}#egg={package-name}. hay una diferencia entre #egg=celeryy #egg=celery[redis], pero ambos provendrán del mismo código fuente.

"etiqueta" también puede ser una rama o un hash de confirmación además de una etiqueta real. Se asume que es así mastersi no especifica.

por ejemplo, git+https://github.com/celery/celery.git#egg=celery==4.3.0verificaría la rama maestra e instalaría eso. Aunque haya especificado un número de versión, no se tiene en cuenta en la instalación. EL NÚMERO DE VERSIÓN ES IGNORADO

Al instalar a través de git u otras URL de VCS, querrá encontrar la etiqueta o el hash de la versión que necesita. Por ejemplo, git+https://github.com/celery/[email protected]#egg=celeryque verificará la confirmación etiquetada "v4.3.0" y luego instalará el paquete desde ese código fuente. Suponiendo que los mantenedores no etiquetaron erróneamente sus repositorios, puede obtener la versión que desea así.

mehtunguh
fuente