es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en python, raspberry-pi, x86-64 y armv7, 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 para x86_64 o en piwheels para armv7l, lo cual representa un desafío.

    Para hacer que funcione en la Raspberry Pi, debes modificar pyproject.toml agregando el siguiente bloque:

    [[tool.poetry.source]]
    name = "piwheels"
    url = "https://www.piwheels.org/simple/"
    

    Luego, debes eliminar poetry.lock y ejecutar poetry 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 versionar pyproject.toml o poetry.lock. Agregar el fragmento de origen al archivo original de pyproject.toml provoca que la compilación en la máquina x86_64 falle con el mensaje No 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:

    $ poetry export --without-hashes > requirements.txt
    $ pip install --requirement requirements.txt
    

    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.

Comments are closed.