Poesía: ¿Cómo publicar paquetes de proyectos dirigidos a múltiples versiones de Python?

1

Tengo un proyecto que me gustaría publicar como paquetes dirigidos a dos versiones de Python (3.6 y 3.8) .

Lo que yo entiendo:

  • Cómo instalar y activar diferentes versiones de Python usando pyenv.
  • Cómo llegar poetrya crear entornos virtuales que se correspondan con la versión de Python elegida.
  • Cómo configurar pyproject.tomlpara especificar la versión de Python, administrar las dependencias y publicar un paquete con esta configuración.

Lo que no entiendo: ¿cómo puedo publicar el mismo paquete para más de una versión de Python? No puedo ser el único con este caso de uso, ¿verdad?

  • ¿Necesita dos pyproject.tomlarchivos? (uno para cada versión de Python y el conjunto de dependencias correspondientes ...)
  • ¿Existen formas establecidas de hacer esto con Poetry, o son necesarias otras herramientas / flujos de trabajo?

Editar

Investigando un poco más, encontré esto https://python-poetry.org/docs/versions/#multiple-constraints-dependencies que parece que podría ser relevante.

Aquí está el ejemplo en el enlace de arriba.

[tool.poetry.dependencies]
foo = [
    {version = "<=1.9", python = "^2.7"},
    {version = "^2.0", python = "^3.4"}
]

También descubrí que puedes especificar la versión de Python usando poetry addasí ...

poetry add cleo --python 3.6.10

Lo que agrega dependencias de pyproject.tomlesta manera ...

cleo = {version = "^0.8.1", python = "3.6.10"}

Ir a experimentar y ver si funciona.

2
  • ¿Cómo te pyproject.tomlves ahora?
    sinoroc
    28 de ene a las 22:34
  • [tool.poetry.dependencies] python = "^ 3.8" cleo = "^ 0.8.1" ... [tool.poetry.dev-dependencies] pytest = "^ 5.4.3" ... 28 de ene a las 22:42
0

Probablemente necesite algo así en su pyproject.toml:

[tool.poetry.dependencies]
python = '3.6 || 3.8'

Pero no estoy seguro de la notación exacta, es un poco vaga.

Parece generar un setup.pycon lo siguiente:

'>=3.6, !=2.7.*, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.7.*'

Así que incluiría 3.9, 3.10, etc, y esto es incorrecto.

3
0

No. No necesita crear varios pyproject.tomlarchivos o crear flujos de trabajo separados para cada versión de Python a la que se dirige (para esta situación específica, al menos, se dirige a versiones similares).

Simplemente puede usar la sintaxis de dependencia para decir que desea apuntar> = 3.6 <4.0 de esta manera ...

[tool.poetry.dependencies]
python = '^3.6'

Y luego agregue dependencias de manera similar ...

poetry add <dependency> python ^3.6

Lo que resulta en algo como esto ...

[tool.poetry.dependencies]
python = '^3.6'
cleo = {version = "^0.8.1", python = "^3.6"}
pyyaml = {version = "^5.4.1", python = "^3.6"}
...

Esto funcionó, aunque fui más allá e hice algunas dependencias menos específicas para evitar incompatibilidades en ciertos hosts.

pyyaml = {version = "^5.0", python = "^3.6"}
...