Pip: Soporte directo de URL PEP 508 e instalación de subdependencias de Git

Creado en 3 jul. 2018  ·  3Comentarios  ·  Fuente: pypa/pip

  • Versión Pip: 10.0.1
  • Versión de Python: 3.7.0
  • Sistema operativo: macOS

Pasé todo el día leyendo sobre la instalación de subdependencias de git y todavía estoy luchando por encontrar la solución correcta.

Mi caso de uso

Bifuré una biblioteca Python existente (disponible en PyPi), agregué algunos cambios que es poco probable que se fusionen en sentido ascendente.
Algunos de mis proyectos dependen de la bifurcación de la biblioteca. Anteriormente, era una aplicación y estaba usando Pipenv para administrar las dependencias de la aplicación, donde podía especificar fácilmente instalar una rama / confirmación específica de Git en Pipfile. Mi aplicación creció y ahora la estoy convirtiendo a una biblioteca (no se publicará en PyPi). Necesito resolver el problema de las subdependencias de Git para la biblioteca.
He leído al menos los siguientes números: # 3610, # 4187, # 2124, # 5384 y muchos otros y por supuesto PEP. Cuando terminé de leer, estaba aún más confundido que cuando comencé.

Por lo que entendí con la implementación de PEP-508 en el pip 10, debería poder usar:

setup(
    name='dmfigol',
...
    install_requires=[
        "requests",
        'smartsheet-python-sdk @ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3',
    ],
)

Pero no funciona:

-> % pip install git+https://<private-git>/dmfigol/my-test-project.git
Collecting git+https://<private-git>/dmfigol/my-test-project.git
  ...
Direct url requirement (like smartsheet-python-sdk@ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3) are not allowed for dependencies

Mis preguntas:
1) ¿Hice algo mal o esto no es compatible?
2) Si no es compatible, ¿será compatible?
3) ¿Entiendo correctamente que también puedo usar una sintaxis similar en pyproject.toml si quiero migrar de setup.py a algo más declarativo?
4) ¿Es la única solución disponible hoy en día utilizar las secciones --process-dependency-links y dependency_links en setup.py ?
5) ¿Qué sucede cuando el upstream actualiza la biblioteca en PyPi a 1.3.4 o superior, y aún me gustaría usar mi versión bifurcada 1.3.3?

Gracias

UPD: solución actualmente en funcionamiento hasta que se implemente # 4187 si se encuentra con este hilo:

setup(
    ...
    install_requires=[
        "smartsheet-python-sdk==10.1.3.3",
    ],
    dependency_links=[
        'https://github.com/dmfigol/smartsheet-python-sdk/archive/no-setuptools-scm.zip#egg=smartsheet-python-sdk-10.1.3.3'
    ],
...
auto-locked support

Comentario más útil

¿Hice algo mal o esto no es compatible?

Los requisitos de URL de PEP 508 como dependencias no son compatibles.

Si no es compatible, ¿será compatible?

Si. Vea abajo.

¿Entiendo correctamente que también puedo usar una sintaxis similar en pyproject.toml si quiero migrar de setup.py a algo más declarativo?

pyproject.toml solo sirve como un lugar para especificar las dependencias del tiempo de construcción y para configurar las herramientas. Cualquier otra cosa que no sea la implementan las herramientas que está utilizando.

¿Es la única solución disponible en la actualidad para usar la sección --process-dependency-links y dependency_links en setup.py?

Si. Esa es toda la motivación detrás del # 4187.


Inhabilitamos la capacidad de usar los requisitos de URL de PEP 508 en las dependencias, ya que no queremos que un paquete instalado desde PyPI dé como resultado que el pip llegue a una URL web arbitraria. Básicamente, pip install spam no debería hacer que pip llegue a nada excepto a PyPI.

La solución propuesta actual en # 4187 es simplemente modificar el condicional de bloqueo para que solo bloquee las dependencias de URL cuando un paquete se esté instalando directamente desde PyPI, de modo que cualquier otro modo de instalación pueda usar dependencias de URL de PEP 508.

Todos 3 comentarios

¿Hice algo mal o esto no es compatible?

Los requisitos de URL de PEP 508 como dependencias no son compatibles.

Si no es compatible, ¿será compatible?

Si. Vea abajo.

¿Entiendo correctamente que también puedo usar una sintaxis similar en pyproject.toml si quiero migrar de setup.py a algo más declarativo?

pyproject.toml solo sirve como un lugar para especificar las dependencias del tiempo de construcción y para configurar las herramientas. Cualquier otra cosa que no sea la implementan las herramientas que está utilizando.

¿Es la única solución disponible en la actualidad para usar la sección --process-dependency-links y dependency_links en setup.py?

Si. Esa es toda la motivación detrás del # 4187.


Inhabilitamos la capacidad de usar los requisitos de URL de PEP 508 en las dependencias, ya que no queremos que un paquete instalado desde PyPI dé como resultado que el pip llegue a una URL web arbitraria. Básicamente, pip install spam no debería hacer que pip llegue a nada excepto a PyPI.

La solución propuesta actual en # 4187 es simplemente modificar el condicional de bloqueo para que solo bloquee las dependencias de URL cuando un paquete se esté instalando directamente desde PyPI, de modo que cualquier otro modo de instalación pueda usar dependencias de URL de PEP 508.

Gracias por la explicación detallada, realmente agradezco su ayuda.

Este hilo se ha bloqueado automáticamente ya que no ha habido ninguna actividad reciente después de que se cerró. Abra un nuevo problema para errores relacionados.

¿Fue útil esta página
0 / 5 - 0 calificaciones