Quiero hacer que un paquete dependa del rango de versión particular, p. >= 0.5.0, < 0.7.0
. ¿Es posible en la opción install_requires
? De ser así, ¿cómo debería ser?Cómo especificar rangos de versión en install_requires (setuptools, distribuir)
Respuesta
De acuerdo con the documentation, su sintaxis debería funcionar correctamente. La documentación indica que:
setuptools
pkg_resources
y utilizan una sintaxis común para especificar las dependencias requeridas de un proyecto. Esta sintaxis consiste en el nombre de PyPI de un proyecto, seguido opcionalmente por una lista de "extras" separados por comas entre corchetes, seguido opcionalmente por una lista de especificadores de versiones separados por comas. Un especificador de versión es uno de los operadores <,>, < =,> =, == o! =, Seguido de un identificador de versión.
La documentación da un ejemplo sencillo como esto:
docutils >= 0.3
# comment lines and \ continuations are allowed in requirement strings
BazSpam ==1.1, ==1.2, ==1.3, ==1.4, ==1.5, \
==1.6, ==1.7 # and so are line-end comments
de ampliar que, si desea que su paquete requiere una versión de docutils
mayor que la versión 0.3 pero menos de la versión 0.5, código como esto funcionaría:
docutils >= 0.3, <=0.5
Dos notas adicionales.
- La documentación también establece que las especificaciones de dependencia redundantes/superpuestos se combinan internamente, por lo
docutils >= 0.3, >=0.2
se combinarían endocutils >= 0.3
. - Además, tenga cuidado con la especificación de números de versión conflictivos, que "is meaningless and may therefore produce bizarre results." Por ejemplo, no sé por qué lo haría, pero no use esto:
docutils >= 0.3, <=0.2
ya que esto es imposible.
Gran respuesta, pero lo que me confunde es que la coma a veces significa ** o ** y a veces ** y **: la lista de especificaciones de la versión exacta dice claramente '1.1 o 1.2 o ...' y combina '> = 0.3 ,> = 0.2' a simplemente '> = 0.2' solo tiene sentido de esa manera. Pero '> = 0.3, <= 0.5' o su párrafo sobre especificación de versión contradictoria necesita la coma para indicar ** y **. – zpea
para construir sobre la pregunta de @zpea: ¿hay alguna forma de definir múltiples rangos de versiones? por ejemplo '(> = 1.0 AND <2) OR (> = 2.7 AND <2.9) OR (> = 4)' – stefanfoulis
Los documentos dicen que> 1,> 2 se convierten en> 1, pero tendría más sentido convertirse en> 2, como dijiste. Alguien sabe por qué? –
Tenga cuidado con las pruebas beta involuntarias. A veces, los mantenedores de paquetes lanzan versiones incompatibles, incompletas o rotas a, b y c para audiencias generales sin previo aviso. La próxima vez que ejecute setup.py en una nueva versión, puede desplegar uno de estos huevos envenenados, y de repente su programa se romperá.
Para mitigar este riesgo, no utilice la declaración de estilo foo >=0.3, <0.4
, que tiene un límite superior puramente numérico. <0.4
aún admite versiones 0.4a0, 0.4a1, 0.4b0, 0.4c3, etc. En su lugar, use un límite superior como <0.4a0
, como en foo >=0.3, <0.4a0
, cuando escriba install_requires.
Cuando setuptools hace algo inesperado, tratando usando verlib para modelar sus comparaciones de versión. Verlib es una buena opción siempre que sus versiones estén normalizadas y no sean contradictorias. Aquí hay un ejemplo que demuestra el orden potencialmente contra-intuitivo de las versiones normalizadas:
#!/usr/bin/env python
from verlib import NormalizedVersion as V
assert (V("0.7.9") < V("0.8a0") < V("0.8a1") < V("0.8b0") < V("0.8b1")
< V("0.8b2") < V("0.8.0") < V("0.8.1a0") < V("0.8.1") < V("0.9")
< V("1.0a3") < V("1.0b2") < V("1.0b20") < V("1.0c0") < V("1.0")
< V("1.0.1"))
assert (V("0.7.9") < V("0.8.0a0") < V("0.8.0a1") < V("0.8.0b0")
< V("0.8.0b1") < V("0.8.0b2") < V("0.8.0") < V("0.8.1a0") < V("0.8.1")
< V("0.9") < V("1.0a3") < V("1.0b2") < V("1.0b20") < V("1.0c0")
< V("1.0") < V("1.0.1"))
print "Version comparisons are sane."
¿Cómo se usa verlib en su archivo setup.py ('install_requires')? –
- 1. ¿Cómo especificar rangos en YAML?
- 2. install_requires en setup.py dependiendo de la versión de Python instalado
- 3. Rangos de versión válida de OSGI
- 4. setuptools Instalación en una versión privada del pitón
- 5. ¿Cómo paro rangos versión de Maven utilizando instantáneas
- 6. ¿Cómo instalar setuptools?
- 7. Cómo desinstalar setuptools python
- 8. Python 3 setuptools en mac
- 9. Distribuir una versión de desarrollo de una aplicación de iPhone
- 10. Cómo especificar qué versión de Perl usar en CentOS
- 11. ¿Cómo especificar una versión única de SNAPSHOT en Gradle?
- 12. ¿Cómo especificar una versión de dependencia específica en nuspec?
- 13. Cómo distribuir archivos e iconos `.desktop` para un paquete de Python en Gnome (con distutils o setuptools)?
- 14. Maven versión plugin: especificar el compilador Java versión
- 15. ¿Es posible requerir PyQt desde setuptools setup.py?
- 16. Cómo implementar rangos en D
- 17. Cómo especificar la versión .NET al usar la opción/CLR
- 18. ¿Cuál es la mejor forma de distribuir un paquete de Python que requiere una versión mínima de Python?
- 19. Agregar url de repositorio a install_requires en project.py
- 20. Cocoa App: ¿Cómo distribuir versiones beta?
- 21. ¿Cómo obtener rangos de facetas en los resultados de solr?
- 22. Cómo empaquetar un demonio Python con setuptools
- 23. ¿Cómo hacer que virtualenv use la última versión de distribuir de forma predeterminada?
- 24. Cómo desencadenar post-compilación usando setuptools/distutils
- 25. usando setuptools con dependencias post-instalación y python
- 26. Haskell: ¿Práctica correcta para especificar la versión en la fuente?
- 27. Rangos de fechas en JXDatePicker de swingx?
- 28. Excluyendo un directorio de nivel superior de un paquete setuptools
- 29. Incluyendo datos estáticos en setup.py (setuptools)
- 30. sql - agrupe por en rangos para incluir rangos sin valores
¿Qué ha intentado? [Los documentos] (http://peak.telecommunity.com/DevCenter/setuptools#declaring-dependencies) parecen sugerir que funcionará la sintaxis como la que tiene en su pregunta. – Blckknght