如何跨架构使用 python-poetry?

Dan*_*inn 17 python x86-64 armv7 raspberry-pi python-poetry

我的主要开发机器是(Raspberry Pi) x86_64,而我的一些部署环境是arm7vl(Raspberry Pi)。对于大多数 Python 开发来说,这不是问题,但某些 Python 库仅在PyPI forx86_64piwheels for aarmv7l. 这导致使用诗歌遇到一些困难。作为一个简单的示例,这是在计算机pyproject.toml上创建的文件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"
Run Code Online (Sandbox Code Playgroud)

相应的poetry.lock文件包含从 PyPI 中提取的文件的哈希值,当您运行时,poetry install一切都会按预期工作。 但是,如果将这两个文件复制到 Raspberry Pi,安装将无法找到合适的.whl文件,因此会退回到尝试从源代码构建,这大约需要 2 小时并且失败:-(

要使其在 Pi 上工作,您需要将此块添加到pyproject.toml

[[tool.poetry.source]]
name = "piwheels"
url = "https://www.piwheels.org/simple/"
Run Code Online (Sandbox Code Playgroud)

...然后删除poetry.lock并运行poetry install。这将重新生成锁定文件(现在包含来自 piwheels.org 的条目)并按预期安装所有内容。然而这并不是很有用,因为这意味着我无法版本pyproject.tomlpoetry.lock. 我也无法在原始pyproject.toml文件中包含上述源代码片段,或者机器上的构建x86_64会因以下原因而终止Unable to find installation candidates.

到目前为止,我能找到的唯一跨平台方法是让机器上的所有内容保持版本控制x86_64,然后当我想安装某些东西时在 Pi 上运行它:

$ poetry export --without-hashes > requirements.txt
$ pip install --requirement requirements.txt
Run Code Online (Sandbox Code Playgroud)

这……很糟糕。当然,一定有更好的方法吗?

Gre*_*000 0

解决你的问题的方法可能是使用 conda 而不是诗歌。然后设置环境变量CONDA_SUBDIR=<your_platform> ,该变量强制在构建虚拟环境时使用平台:

conda env create ...
Run Code Online (Sandbox Code Playgroud)

(未经测试)然后您应该能够传输创建的虚拟环境并在部署环境中使用它。