¿Cómo utilizar python-poetry en diferentes arquitecturas?
Mi máquina de desarrollo principal es x86_64, mientras que algunos de mis entornos de implementación son arm7vl (Raspberry Pi). Para la mayoría del desarrollo de Python, esto no es un problema, pero algunas bibliotecas de Python solo están disponibles exclusivamente en PyPI para x86_64 o en piwheels para aarmv7l. Esto ha dificultado el uso de Poetry. Como ejemplo simple, aquí hay un archivo pyproject.toml creado en la máquina x86_64:
[tool.poetry]
name = "poetrytest"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.9"
opencv-python = "^4.5.5"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
El archivo poetry.lock correspondiente contiene hashes de archivos extraídos de PyPI y cuando ejecutas poetry install todo funciona como se espera. Sin embargo, si copias estos dos archivos a una Raspberry Pi, la instalación no puede encontrar un archivo .whl adecuado y, por lo tanto, intenta compilar desde el origen, lo que tarda aproximadamente 2 horas y falla 🙁
Para que funcione en la Pi, debes agregar este bloque a pyproject.toml:
[[tool.poetry.source]]
name = "piwheels"
url = "https://www.piwheels.org/simple/"
… luego borra poetry.lock y ejecuta poetry install. Esto volverá a generar el archivo de bloqueo (ahora con entradas de piwheels.org) e instalará todo como se espera. Sin embargo, esto no es muy útil, ya que significa que no puedo versionar pyproject.toml ni poetry.lock. Tampoco puedo incluir el fragmento de origen mencionado anteriormente en el archivo pyproject.toml original, ya que la compilación en la máquina x86_64 falla con “Unable to find installation candidates”.
Hasta ahora, la única forma de hacer que esto funcione en varias plataformas que puedo encontrar es mantener todo versionado desde la máquina x86_64 y simplemente ejecutar esto en la Pi cuando quiero instalar algo:
$ poetry export --without-hashes > requirements.txt
$ pip install --requirement requirements.txt
lo cual… es molesto. Seguramente debe haber una mejor manera, ¿no?/you@example.com
davy.ai
Como experto en TI especializado en
python
,raspberry-pi
,x86-64
yarmv7
, el desafío de implementar bibliotecas de Python en diferentes entornos puede ser complicado. En la mayoría de los casos, esto no es un problema, pero algunas bibliotecas están disponibles exclusivamente en PyPI parax86_64
o enpiwheels
paraarmv7l
, lo cual representa un desafío.Para hacer que funcione en la Raspberry Pi, debes modificar
pyproject.toml
agregando el siguiente bloque:Luego, debes eliminar
poetry.lock
y ejecutarpoetry install
. Esto volverá a generar el archivo de bloqueo con las entradas de piwheels.org e instalará todo como se espera. Sin embargo, este enfoque tiene limitaciones ya que no puedes versionarpyproject.toml
opoetry.lock
. Agregar el fragmento de origen al archivo original depyproject.toml
provoca que la compilación en la máquinax86_64
falle con el mensajeNo se pueden encontrar candidatos de instalación
.Una posible forma de solucionar esto es mantener todo versión a partir de la máquina
x86_64
y ejecutar el siguiente comando en la Raspberry Pi para instalar las bibliotecas:Este enfoque multiplataforma no es ideal y puede llevar tiempo. Por lo tanto, todavía hay margen para mejorar el proceso de implementación en diferentes entornos.