Python 包管理器 uv 没有 arm64 musl 安装包

项目里要在嵌入式设备上面跑起某个工具,因为工具本身需要高版本的 Python,而系统里自带的只是 Python 3.7,所以准备通过 uv 来安装高版本的虚拟环境。

因为系统是基于 musl 库,所以从 uv Release 发布页面里,找到 arm64 musl 对应的包 uv-aarch64-unknown-linux-musl.tar.gz,下载并解压缩到设备上系统的 /usr/bin/ 目录下,可以直接运行。

uv 提供了各种版本的 Python 安装包,可以从 astral-sh/python-build-standalone 项目下看到。使用时,通过 uv python list 显示可用的版本,并通过 uv python install <ver> 下载并安装指定版本。

问题

实际在开发环境里遇到的问题是这样的,除了本地自带的 Python,uv 对于 arm64/musl 的平台,并没有提供支持和下载:

# uv python list
cpython-3.7.1-linux-aarch64-musl    /usr/bin/python3.7
cpython-3.7.1-linux-aarch64-musl    /usr/bin/python3 -> python3.7
cpython-3.7.1-linux-aarch64-musl    /usr/bin/python -> python3

从 uv 在线文档页面 python-versions / CPython distributions 里看到,arm64/musl 现在还没有支持:

Additionally, some platforms may not be supported (e.g., distributions are
not yet available for musl Linux on ARM).

另外,对于这个问题,python-build-standalone 的 Issue: Add support for aarch64 musl 已经有讨论。从内容来看,uv 项目方因为编译原因,没有提供 arm64/musl 的版本。项目开发者是这样回复的

I would use the Python versions from the distribution instead of the uv managed ones for now.

临时解决办法

不得已,只能通过为项目单独编译高版本的 Python 来解决。考虑到其他已有工具相关的版本兼容问题,目前只是拷贝安装到某个新建目录,并通过设置环境变量指向来使用:

$ export PYTHONHOME=xxx
$ export PYTHONPATH=xxx/:xxx/lib-dynload
$ export LD_LIBRARY_PATH=yyy
$
$ ./app ...

更新

从 issue 里的讨论来看,新版本已经有支持,所以在板子上进行了尝试。

先把 uv 升级到最新版本,并运行:

$ uv python list
cpython-3.14.0rc2-linux-aarch64-musl                 <download available>
cpython-3.14.0rc2+freethreaded-linux-aarch64-musl    <download available>
cpython-3.13.7-linux-aarch64-musl                    <download available>
cpython-3.13.7+freethreaded-linux-aarch64-musl       <download available>
cpython-3.12.11-linux-aarch64-musl                   <download available>
cpython-3.11.13-linux-aarch64-musl                   <download available>
cpython-3.10.18-linux-aarch64-musl                   <download available>
cpython-3.9.23-linux-aarch64-musl                    <download available>
cpython-3.7.1-linux-aarch64-musl                     /usr/bin/python3.7
cpython-3.7.1-linux-aarch64-musl                     /usr/bin/python3 -> python3.7
cpython-3.7.1-linux-aarch64-musl                     /usr/bin/python -> python3

从结果里可以看到,已经有了 Python 各个版本的预编译支持。

接下来下载安装:

uv python install 3.12

但在创建虚拟环境时还是有问题:

$ uv venv -p 3.12 --prompt xxx
error: Querying Python at `python3.12` failed with exit status exit status: 127

[stderr]
Error relocating python3.12: copy_file_range: symbol not found
Error relocating python3.12: secure_getenv: symbol not found

Read More: