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.
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'
],
...
¿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.
Comentario más útil
Los requisitos de URL de PEP 508 como dependencias no son compatibles.
Si. Vea abajo.
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.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.