uv包管理器安装python的研究与本地镜像库搭建

5 阅读4分钟

uv包管理器安装python的研究与本地镜像库搭建

1. 前言

安装完成uv之后,因为本身是通过脚本进行安装的,不带有python的环境,接下来通过通过uv安装python环境,在实际的安装中发现下载速度巨慢,研究一下如何加快下载速度

2. 对于uv下载实现的研究

通过对于资料《【python】uv python下载加速 以及 包加速》研究,发现uv的python下载是通过访问github上面python-build-standalone项目实现的,并且文中也给出了相关解决方案更换为南京大学镜像源

3. 实际使用情况

通过对于通过《【python】uv python下载加速 以及 包加速》上的说明进行配置

在实际使用过程中部分python的安装速度确实增加了,也说明是通过镜像库进行的下载,但部分版本的python在实际下载过程中直接报错

4. 报错分析

报错内容如下

error: Failed to install cpython-3.13.2-windows-x86_64-none
  Caused by: Failed to download https://mirror.nju.edu.cn/github-release/indygreg/python-build-standalone/20250317/cpython-3.13.2%2B20250317-x86_64-pc-windows-msvc-install_only_stripped.tar.gz
  Caused by: HTTP status client error (404 Not Found) for url (https://mirror.nju.edu.cn/github-release/indygreg/python-build-standalone/20250317/cpython-3.13.2%2B20250317-x86_64-pc-windows-msvc-install_only_stripped.tar.gz)

通过对于github原本仓库与镜像站的对比分析:

南京大学镜像站仅同步了最新的镜像,旧的内容直接删除了,所以导致uv在下载部分版本的python找不到文件的情况

想通过配置文件解决这个问题,查询官网文档无果之后,只能从uv的源码入手,奈何不会rust只能通过旁敲与参数进入入手

通过对源码的研究,发现uv的python下载地址来源于uv\crates\uv-python\download-metadata.json文件,通过对于元数据文件、github发布、南京大学镜像库多方对比,发现主流版本的pyton都是可以实现,反而我选了一个非主流版本导致的报错

通过这次的数据对比发现,python版本的下载链接的格式已经固定死了,没法通通过命令或者配置文件的方式直接修改下载地址,好在通过南京大学镜像站主流python的下载是没有问题的

5. 总结解决python下载慢的思路

具体软件源配置内容放置在扩展内容当中,本内容主要是软件源链接怎么来的

5.1. 方案一:使用南京大学镜像站

通过修改全局配置文件、环境变量、--mirror参数指定软件源地址为南京大学镜像源

5.2. 方案二:使用github加速代理

本质与指定软件源一样,通过修改软件源进行加速

代理加速地址 + 软件地址:https://github.com/astral-sh/python-build-standalone/releases/download/

例如:

https://gitproxy.click/https://github.com/astral-sh/python-build-standalone/releases/download/

5.3. 方案三:搭建本地镜像站

通过之前对uv github上源码的分析,发现有一键创建本地镜像的脚本

脚本位于uv\scripts\create-python-mirror.py

github脚本地址

可以一键下载全部镜像到当前目录的mirror文件下

脚本的下载需要配置元数据进行下载:uv\crates\uv-python\download-metadata.json

路径必须一致,否则需要修改脚本VERSIONS_FILE定义

...
VERSIONS_FILE = REPO_ROOT / "crates" / "uv-python" / "download-metadata.json"
...

修改为

...
VERSIONS_FILE = SELF_DIR / "download-metadata.json"
...

download-metadata.json放置当前目录下, github下载链接

使用uv run create-python-mirror.py命令即可自动下载镜像库

元数据内容应该回随着版本更新更新,所以更新uv版本的时候可以更新镜像库

这边下载测试了一下,截至20250409的版本目前总镜像大小大约为11g左右

并且生成本地镜像库本地地址与使用案例

Example usage: `UV_PYTHON_INSTALL_MIRROR='file://D:\uv\scripts\mirror' uv python install 3.13`

mirror文件添加到web服务器上即可实现本地镜像库的搭建

6. 扩展内容

如何配置python的安装源文件

方法一:通过配置文件

全局配置文件方式:

windows位于:%APPDATA%\uv\uv.toml

linux位于:/etc/uv/uv.toml

具体详情自行查找

python-install-mirror = "https://mirror.nju.edu.cn/github-release/indygreg/python-build-standalone"

项目配置文件方式

[tool.uv]
python-install-mirror = "https://mirror.nju.edu.cn/github-release/indygreg/python-build-standalone"

方法二:通过环境变量

linux:

UV_PYTHON_INSTALL_MIRROR= '<镜像地址>'
uv python install

windows:

$env:UV_PYTHON_INSTALL_MIRROR='<本地镜像库>'
uv python install

方法三:安装时通过--mirror参数指定

uv python install 3.13.3 --mirror https://mirror.nju.edu.cn/github-release/indygreg/python-build-standalone/

7. 总结

经过对于uv包管理器多版本的python安装,发现uv包管理依赖于uv作者另一个python构建的项目,并且下载方式卡的非常死,目前加速的形式只有使用github加速与使用镜像库的方式,目前国内镜像库只有南京大学的镜像库且只有最新的python构建,如果项目使用的是特定版本的python,则会报错,想完全实现本地自动化安装,需要搭建本地镜像库配合使用