Sintaxis de versión de dependencia para Python Poetry

4 minutos de lectura

El Poesía project es un sistema de gestión de dependencias para Python. Utiliza el nuevo pyproject.toml archivo como su archivo de configuración.

Las herramientas de Poetry admiten algunas formas diferentes de especificar las versiones permitidas de sus dependencias. ¿Cuál es la sintaxis del especificador de versión para las dependencias de poesía?

Avatar de usuario de Christian Long
cristiano largo

En pyproject.toml, utiliza el [tool.poetry.dependencies] y [tool.poetry.dev-dependencies] secciones para especificar sus dependencias por nombre y versión.

cuando corres poetry installPoetry instalará los requisitos hash exactos que ha escrito en su poetry.lock archivo.

Sin embargo, cuando corres poetry update, Poetry verificará si puede encontrar versiones más nuevas de sus dependencias que coincidan con los criterios de versión que especificó. Si poetry update encuentra una versión más reciente permitida por sus especificadores de versión, la descargará e instalará. También actualizará su poetry.lock archivo con el nuevo número de versión y el nuevo hash.

Poetry admite varias formas diferentes de declarar la versión permitida de sus dependencias.

Versión exacta

Si no incluye ningún modificador, Poetry mantendrá su dependencia anclada en esa versión exacta.

beepboop = "2.1.7"

Con esa configuración, si se lanza una nueva versión de beepboop, poetry update no lo instalará.

Versión de intercalación

Si usas el signo de intercalación ^ carácter, Poetry se actualizará a cualquier versión nueva que no cambie la sección distinta de cero más a la izquierda.

beepboop = "^2.1.7"
# Equivalent to >=2.1.7, <3.0.0

Con la configuración anterior, poetry update actualizaría beepboop a 2.1.8, 2.2, 2.3, etc. Poetry no se actualizaría a beepboop 3.0, porque eso cambia la sección distinta de cero más a la izquierda del número de versión de 2 a 3.

zeepzorp = "^0.24.1"
# Equivalent to >=0.24.1, <0.25.0

Con la configuración anterior, poetry update actualizaría zeepzorp a 0.24.2. Poetry no se actualizaría a zeepzorp 0.25.0, porque eso cambia la sección distinta de cero más a la izquierda del número de versión de 24 a 25.

El modificador de versión caret es bastante agresivo sobre qué versiones mejoradas están permitidas. Esto puede causar problemas si los mantenedores de sus dependencias introducen cambios importantes sin incrementar el número de versión principal.

Versión tilde

la tilde ~ el personaje le dice a Poetry que permita actualizaciones menores. Si especifica una versión principal, secundaria y de parche, solo se permiten cambios a nivel de parche. Si especifica una versión principal y secundaria, nuevamente solo se permiten cambios a nivel de parche. Si especifica solo una versión principal, se permiten cambios menores y a nivel de parche.

beepboop = "~2.1.7"
# Equivalent to >=2.1.7, <2.2.0

beepboop = "~2.1"
# Equivalent to >=2.1.0, <2.2.0

beepboop = "~2"
# Equivalent to >=2.0.0, <3.0.0

El modificador de versión de tilde es menos agresivo que el modificador de versión de intercalación en las actualizaciones que permitirá.

Versión comodín

La estrella * el carácter es un comodín. Se permite cualquier número de versión en la posición de comodín.

beepboop = "2.1.*"
# Equivalent to >=2.1.0, <2.2.0

beepboop = "2.*"
# Equivalent to >=2.0.0, <3.0.0

beepboop = "*"
# Allows any version. Equivalent to >=0.0.0  

Versión de desigualdad

Puede usar desigualdades para especificar rangos de versión permitidos. Algunos ejemplos:

beepboop = ">= 1.2.0"
beepboop = "> 1"
beepboop = "< 2"
beepboop = "!= 1.2.3"

Especificadores de versiones múltiples

Puede definir rangos de versiones permitidas usando múltiples desigualdades, separadas por comas.

beepboop = ">= 1.2, < 1.5, !=1.2.2"

SolverProblemError

Si editó a mano su pyproject.toml archivo y usted está recibiendo un SolverProblemErrorintenta usar el poetry add comando en su lugar.

Por ejemplo, intenté agregar mypy = "^0.670" para mi pyproject.toml y obtuve un error del solucionador. El poetry add El comando formateó el archivo de la manera que quería Poesy y especificó la dependencia como mypy = "^0.670.0".

También puede obtener un SolverProblemError si especifica su versión de Python como '*' en pyproject.toml. Intente especificar su versión de python más estrictamente, como "^3.6". Mira esto Problema de GitHub para más información.

Referencias

https://python-poetry.org/docs/dependency-specification/

https://github.com/sdispater/poetry#dependencies-and-dev-dependencies

  • Cuál es la diferencia entre x.y.z y ==x.y.z?

    – Nicolás

    4 de agosto de 2021 a las 16:50

Sugerencia: puede consultar otro pyproject.toml para verificar cómo se usan las versiones allí. Por ejemplo la propia poesía oficial .toml https://github.com/python-poetry/poetry/blob/master/pyproject.toml

¿Ha sido útil esta solución?