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
可以一键下载全部镜像到当前目录的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,则会报错,想完全实现本地自动化安装,需要搭建本地镜像库配合使用