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 ...