Back to Chsrc

uv 换源实现说明

src/recipe/lang/Python/uv/README.md

0.2.73.9 KB
Original Source
<!-- ----------------------------------------------------------- ! SPDX-License-Identifier: GFDL-1.3-or-later ! ------------------------------------------------------------- ! Doc Type : Markdown ! Doc Name : uv换源实现说明.md ! Doc Authors : @Mikachu2333 ! Created On : <2026-08-02> ! Last Modified : <2026-08-02> ! ---------------------------------------------------------- -->

uv 换源实现说明

chsrc set uv 同时配置两类下载地址:

  1. Python 包索引,即 uv.toml[[index]]pyproject.toml[[tool.uv.index]]
  2. uv 管理的 CPython 下载地址,即 python-install-mirror

配置文件选择

项目作用域只修改当前目录,不向父目录查找并修改配置:

  1. 当前目录存在 uv.toml 时修改 uv.toml
  2. 否则,当前目录存在 pyproject.toml 时修改其中的 [tool.uv]
  3. 两者都不存在时创建 uv.toml

这个顺序与 uv 的行为一致:同一目录同时存在 uv.tomlpyproject.toml[tool.uv] 时,uv 优先使用 uv.toml 中的对应字段。

用户作用域使用 uv 的用户配置目录:Windows 为 %APPDATA%\uv\uv.toml,Linux 和 macOS 优先使用 $XDG_CONFIG_HOME/uv/uv.toml,未设置时使用 ~/.config/uv/uv.toml

Python 包索引

索引 URL 必须指向兼容 Python Simple Repository API 的地址,通常以 /simple 结尾;uv 不要求 URL 必须以 / 结尾。

default = true 表示该 index 替代 uv 内置的 PyPI,并且始终具有最低 index 优先级。它不表示“文本中的第一个”或“最高优先级”。配置中存在多个 index 时,chsrc 优先更新 default = true 的 index;没有 default index 时才更新第一个 index。

默认的 first-index 策略会在第一个包含目标包的 index 停止搜索。私有源与公共镜像并存时,不应把它理解成跨所有 index 选择全局最新版本。

Python 下载镜像

python-install-mirrorhttps://github.com/astral-sh/python-build-standalone/releases/download 的替换前缀。配置值必须是镜像侧对应的 releases/download 基址,不能是仓库主页、某个具体构建日期或某个归档文件。uv 会在其后追加构建日期和 归档文件名。

官方示例使用不带尾部 / 的基址,chsrc 内置源也遵循该形式。

reset 与备份

chsrc set uv 修改已有配置前会创建 .bak 备份。

chsrc reset uv 把 chsrc 管理的 index 与 python-install-mirror 写回默认上游:index 恢复为 https://pypi.org/simplepython-install-mirror 恢复为 https://github.com/astral-sh/python-build-standalone/releases/download。 其他用户配置原样保留,不依赖 .bak 恢复旧 URL。

指定镜像代码时,若该代码同时提供 PyPI 与 Python 下载镜像(例如 nju),两部分使用同一镜像代码;仅提供其中一类时,另一类自动测速。用户自定义 URL 只解释为 PyPI index URL,因为 Python 下载镜像要求完全不同的 releases 目录布局。

default = true 的 index(不存在时取第一个)被视为 PyPI 替代源,reset 只修改这一处;私有 index 不受影响。

实现边界

配置改写器只解析 chsrc 使用的 TOML 子集,但支持常见的行首缩进、CRLF、行尾注释、多个 index,以及位于 [tool.uv.sources] 等子表之后的 [[tool.uv.index]]。读取时换行统一为 LF 处理,写入时按系统平台输出行尾(Windows 为 CRLF,其余为 LF)。多行字符串和完整 TOML 转义语义不属于该轻量改写器的支持范围。

参考: