uv 0.10 系列(0.10.0–0.10.12)变更全解析:破坏性变更迁移、Python 版本管理稳定化与补丁版本修复
2026/9/6 22:09:56 网站建设 项目流程

uv 0.10 系列(0.10.0–0.10.12)变更全解析:破坏性变更迁移、Python 版本管理稳定化与补丁版本修复

【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv

本文基于仓库中的 changelogs/0.10.x.md 完整梳理 uv 0.10 系列的发布脉络:0.10.0 的 12 项破坏性变更与 4 项预览功能稳定化,以及 0.10.1 至 0.10.12 共 12 个补丁版本在 Python 解释器支持、Docker 镜像、缓存机制、性能与平台兼容方面的演进。读完本文,你可以掌握从 0.9.x 升级到 0.10.x 的完整迁移清单(含每一项的豁免方式),并结合 crates/uv-cli/src/lib.rs、crates/uv-virtualenv/src/lib.rs 等源码理解这些变更在实现层的落地方式。

0.10.0:为 0.10 系列定调的“谨慎式”大版本

uv 0.10.0 发布于 0.9.0(2025 年 10 月)之后,官方定位是:累积了一批“提升正确性和用户体验、但可能破坏部分工作流”的变更,出于谨慎统一标记为破坏性变更,绝大多数用户可以直接升级而无需修改配置。该版本还稳定化了多项预览功能:

  • Python 升级机制稳定化,包括uv python upgrade命令、uv python install --upgrade标志,以及安装新 Python 时自动升级虚拟环境中的补丁版本;
  • add-boundsextra-build-dependencies配置项稳定化;
  • uv workspace diruv workspace list(用于编写针对 workspace 成员的脚本)稳定化。

同时官方特别提示:uv_build构建后端没有任何破坏性变更,但如果你在[build-system]表中对后端版本设置了上界(如<0.10.0),应将其更新为<0.11.0

破坏性变更一:uv venv必须显式--clear才能清除已有虚拟环境

此前uv venv在交互式环境下删除已有虚拟环境前会提示确认,在非交互式环境下则不加确认直接删除。0.10.0 起,uv venv要求显式传入--clear标志才会删除已有虚拟环境;该行为在 uv 0.8 中已提前给出警告(见 changelogs/0.8.x.md 的 Breaking changes 小节)。

豁免方式:传入--clear标志,或设置环境变量UV_VENV_CLEAR=1

从源码可以看到这套参数体系的完整设计,crates/uv-cli/src/lib.rs 中定义了四组互相配合的选项:

  • --clear-c):删除目标路径上已有的文件或目录后重建,支持UV_VENV_CLEAR环境变量,采用布尔解析(BoolishValueParser),因此UV_VENV_CLEAR=1UV_VENV_CLEAR=true都生效;
  • --force:允许--clear删除非虚拟环境的目录(会删除目标路径下所有文件);
  • --no-clear:存在 TTY 时不再交互式提示,直接以错误退出,且优先级高于环境变量overrides_with = "clear");
  • --allow-existing:不清理、直接在目标路径上写入新环境,官方警告若旧环境与解释器不一致可能导致意外行为。

对应的错误提示逻辑在 crates/uv-virtualenv/src/lib.rs:当目标路径已存在时抛出Exists错误,并自动附带提示 “Use the--clearflag or setUV_VENV_CLEAR=1to replace the existing virtual environment”;若是非虚拟环境目录则提示使用--force。集成测试 crates/uv/tests/python/venv.rs 覆盖了该行为,包括--no-clear覆盖UV_VENV_CLEAR=1的优先级验证(见该文件 L2343 附近的用例注释)。

破坏性变更二:多个 index 同时标记default = true时报错

此前 uv 会静默接受多个default = true的 index 并使用其中第一个;现在只要多个 index 被标记为默认,uv 直接报错。无法豁免,只能将default = true从除一个之外的所有 index 中移除。这类静默歧义被转为显式错误,是 0.10.0 “提升正确性”主题的典型体现。

破坏性变更三:explicitindex 必须命名

explicit(显式)index 只能通过[tool.uv.sources]表使用,而该表要求按名字引用index。此前 uv 会静默接受未命名的 explicit index——但它们永远无法被引用。现在未命名的 explicit index 会直接报错。无法豁免,为其添加name或删除该条目。

破坏性变更四:替代 Python 实现按其实现名安装可执行文件

此前uv python install会把 PyPy、GraalPy、Pyodide 的可执行文件以python3.10之类的名字写入 bin 目录,与 CPython 安装相互冲突。现在这些可执行文件以实现名命名,例如pypy3.10graalpy3.10pyodide3.12无法豁免

破坏性变更五:uv tool run/uv tool install尊重全局 Python 版本 pin

此前这两个命令忽略通过uv python pin --global设置的全局 Python 版本 pin;现在在未显式请求版本时,它们会使用全局 pin。对uv tool install有两点细节值得注意:

  • 若工具已安装,除非提供--reinstall--python,否则不会切换 Python 版本;
  • 若工具当初是用显式--python安装的,全局 pin 不会覆盖它。

豁免方式:显式提供--python标志。

破坏性变更六:移除部分 Docker 镜像

Debian Bookworm 与 Alpine 3.21 镜像已在 uv 0.9 中被 Debian Trixie 和 Alpine 3.22 取代为默认,本版本正式移除;由于 Trixie / Alpine 基础镜像不再支持 Python 3.8,Python 3.8 系列镜像也一并移除。不再发布的镜像标签:

  • uv:bookwormuv:bookworm-slim
  • uv:alpine3.21
  • uv:python3.8-*

迁移方案:用uv:debianuv:trixie替代uv:bookworm,用uv:alpineuv:alpine3.22替代uv:alpine3.21,用更新的 Python 版本替代uv:python3.8-*

破坏性变更七:不再提供 PPC64(大端)预构建二进制

uv 不再发布 PPC64(大端)平台的预构建二进制,官方判断该平台使用极少且只受单个 manylinux 版本支持;PPC64LE(小端)不受影响。从源码构建 uv 在该平台仍然可行。

破坏性变更八:可重定位虚拟环境不再生成activate.csh

此前uv venv --relocatable生成的activate.csh脚本内含硬编码路径,与“可重定位”目标自相矛盾。现在对--relocatable环境直接不生成该脚本。无法豁免

破坏性变更九:多条凭据匹配同一 URL 时必须指定用户名

通过uv auth login为同一主机注册多组用户名/密码后,此前 uv 在需要认证(例如uv auth token获取令牌)且多条凭据匹配该 URL 时会取第一条匹配项;现在改为直接报错无法豁免,正确做法是在请求中带上用户名,例如:

uv auth token --username foo example.com

破坏性变更十:修改exclude-newer不再使锁文件版本失效

此前修改exclude-newer设置会导致包版本被升级,等于完全忽略锁文件;现在 uv 只在包版本超出新的exclude-newer范围时才变更版本。豁免方式(即恢复旧行为):显式使用--upgrade--upgrade-package

破坏性变更十一:uv format升级至 Ruff 0.15.0

uv format现在默认使用 Ruff 0.15.0,采用 Ruff 2026 风格指南,代码格式很可能发生变化。豁免方式:指定旧版本,例如uv format --version 0.14.14

破坏性变更十二:uv crate 测试特性改用test-前缀

此变更只影响 uv 的分发者:用于门控测试依赖的 Cargo 特性(如pypi)被重命名为带test-前缀的形式(如test-pypi),以便语义清晰。

0.10.0 稳定化的预览功能

  • uv python upgradeuv python install --upgrade:安装 Python 版本时会创建一个不带补丁版本号的中间目录(如cpython-3.11下存放3.11.9),虚拟环境会在安装新补丁版本时被透明升级。概念细节可参考 docs/concepts/python-versions.md。实现侧,crates/uv/src/commands/python/install.rs 定义了PythonUpgradeSource(区分Upgrade命令来源与Install--upgrade来源)与PythonUpgrade枚举(Enabled(source)/Disabled),并贯穿uv python installuv python upgrade两条命令路径(见 crates/uv/src/lib.rs 中PythonUpgradeSettings::resolve的接线)。
  • uv add --boundsadd-bounds配置项:行为不变,只是不再打印实验性警告。
  • uv workspace listuv workspace dir:行为不变,只是不再打印实验性警告。注意从源码结构看,crates/uv/src/commands/workspace/list.rs 中对--scripts选项仍有PreviewFeature::WorkspaceListScripts预览门控,说明 workspace 脚本相关能力在 0.10.0 时是分层稳定的。
  • extra-build-dependencies:行为不变,不再打印实验性警告。

0.10.0 其他增强与修复

增强:改进 ABI 标签错误消息措辞;引入 10 秒连接超时;允许在PYX_API_URL不一致时仍把pyx.dev作为uv auth命令的目标。修复:完整支持所有 CPython ABI 标签后缀;支持在 Linux 与 macOS 上检测 PowerShell;对流式传输的超时错误进行重试。

0.10.1 – 0.10.3:稳健性收尾

0.10.1(2026-02-10)

  • 读取元数据出错时不再 panic;
  • 遇到空的 workspace 成员时跳过而非失败;
  • 已存在的只读sdist-vX/.git不再导致失败;
  • 文档:在 Python 文档中推荐uv python update-shell而非uv tool update-shell

0.10.2(2026-02-10)

  • 弃用意外的 ZIP 压缩方法(解压安全面的收紧);
  • 修复cargo-install因缺少uv-test依赖而失败的问题。

0.10.3(2026-02-16)

Python 方面新增 CPython 3.15.0a6。增强:文件锁改为不开启写锁;Windows trampoline 错误信息与 uv 本体保持一致;记录启用了哪些预览功能。预览功能:uv format支持 Ruff 版本约束与exclude-newer;启用target-workspace-discovery时修复脚本路径处理;uv format用版本约束选择默认 Ruff 版本。修复集中在正确性与健壮性:

  • 不再按前缀匹配托管 Python 版本(例如指定cpython-3.1不会误匹配 CPython 3.10);
  • 修复 Windows 上--allow-existing对次版本链接的处理;
  • 遇到不受管理的 workspace 成员时不再 panic;
  • 提升请求计时精度;
  • 拒绝版本段中的u64::MAX以防止溢出。

文档方面将 Debian 参考从 Bookworm 改为 Trixie,呼应 0.10.0 的镜像移除。

0.10.4 – 0.10.5:锁文件、NFS 与 Linux 文件复制

0.10.4(2026-02-17)

  • 展示uv python错误时去除受影响路径的重复引用;
  • 跳过仅含 git 忽略文件的 workspace 成员发现(含子目录);
  • 修复在文件系统根目录初始化包时的 panic(如uv init / --name foo);
  • 修复uv_build构建后端产出的wheel/sdist文件权限问题;
  • 回退锁文件的改动,修复 NFS 挂载点上锁文件的问题。

0.10.5(2026-02-23)

本版本条目较多,值得重点关注三类:

Linux 文件复制路径优化:默认尝试 reflink(#18117),reflink 失败后先回退到硬链接再退化为完整拷贝(#18104)——这条“reflink → hardlink → copy”的降级链在 0.10.6 又补上了文件权限保持的修复。

索引与缓存行为:当命名 index 在父级配置文件中找到时给出提示;uv lock --frozen增加警告;exclude-newer使锁文件失效时的错误信息修正(与 0.10.0 的破坏性变更十形成呼应)。

其他pylock.toml的 wheel 按 tags 与requires-python过滤;uv publish校验 wheel 文件名已规范化;性能上优化了与某个 extra 反复冲突的求解路径;修复UV_NO_DEFAULT_GROUPS拒绝1等真值的问题、iOS 平台检测、--no-emit-workspace在单成员 workspace 配合--all-packages时的行为;构建并发改为全局信号量;项目级 conflicts 传播到包 extras。

0.10.6 – 0.10.8:Python 版本更新与镜像体系

0.10.6(2026-02-24)

三个修复:对 fork 标记应用锁文件标记规范化;修复脚本requires-python.python-version冲突时的 Python 版本选择;Linux reflink 保持文件权限(承接 0.10.5 的 reflink 默认化)。

0.10.7(2026-02-27)

修复 Windows Containers on Windows 中 junction 的处理;为中间件重试启用日志;uv 发布产物上传至镜像。

0.10.8(2026-03-03)

本版本引入了新的 Python 版本与一批分发基础设施改进:

  • 新增:CPython 3.10.20、3.11.15、3.12.13;
  • Docker:新增基于 Docker Hardened Images 的镜像;为 Docker 镜像添加 SBOM 证明;
  • 镜像默认化:默认从 Astral 镜像获取 CPython;安装脚本默认从 Astral 镜像下载 uv 发布产物;
  • 网络行为:配置 1 秒的最低重试延迟;
  • uv_build:扩展 direct build 兼容性;
  • 新配置:新增UV_INIT_BARE环境变量用于uv init
  • 修复:防止uv tool upgrade安装被排除的依赖;保存工具回执时提升认证策略;脚本中尊重 exclusions;pylock.toml保留默认分支的 Git SHA;--upgrade时尊重 constraints;修复uv tree的孤立根节点与过早去重;URL 依赖跳过已安装 Python 检查。

0.10.9 – 0.10.10:PyTorch 列表、uv audit预览与缓存性能

0.10.9(2026-03-06)

  • PyTorch 列表新增fbgemm-gpufbgemm-gpu-genaitorchrectorchtunetorchcodec(对 AI 基础设施依赖管理是实用的扩展);
  • 记录出错前的耗时;使用uv_build相关设置但后端并非uv_build时给出警告;
  • Linux 系统识别失败时回退到/usr/lib/os-release
  • 构建使用cargo auditable把 SBOM 纳入 uv 构建产物;
  • 新配置UV_VENV_RELOCATABLE环境变量(呼应 0.10.0 破坏性变更八中的 relocatable 主题);
  • 性能:避免 tomlDocument的额外开销;使用单一全局 workspace 缓存(对大 workspace 的启动与解析有明显意义,从源码结构看这是把 workspace 发现结果在进程内全局复用);
  • 修复:trampoline 任务分配失败时继续;硬链接数量超限时优雅降级而非失败;workspace 成员尊重构建约束;脚本中重新校验 editables 与其他依赖;Android 上支持 Python 3.13+;支持cp3-none-any标签;跳过 Windows 上链接到 Python 的损坏工具的虚拟环境。

0.10.10(2026-03-13)

  • Python:新增 CPython 3.15.0a7;
  • 新增能力uv tool list增加--outdated标志(查看已安装工具的过期状态);构建工作流加入 riscv64 musl 目标;Ruff 默认从 Astral 镜像获取;
  • 缓存uv cache clear成为uv cache clean的别名;
  • 预览功能(uv audit明显发力):审计输出加入链接;审计输出/报告格式;切换为批量 OSV 查询;
  • 修复:跨 index 不共享版本元数据;升级 zlib-rs 到 0.6.2 修复 Windows 上大 wheel 解压 panic;过滤不支持环境的 wheel;锁文件保留绝对/相对路径;uv tool install --force重建 Python 环境;缓存环境尊重时间戳等缓存键;uv export简化所选 extra 的标记;修复 Windows 操作系统与版本上报。

文档方面,平台支持策略新增第三档(tier 3),纳入 freebsd 与 32 位 Windows。

0.10.11 – 0.10.12:解释器支持扩展与生态收尾

0.10.11(2026-03-16)

  • Ruff 发布元数据改从 Astral 镜像获取;uv 自身改用 PEP 639 license 元数据;
  • 性能:优化 distribution id 的构建性能;
  • 修复--project可直接指向pyproject.toml,其他文件降级为警告;macOS 上查询解释器时禁用SYSTEM_VERSION_COMPAT;强制支持环境可用的发行版集合;修复UV_PYTHON_INSTALL_DIR为相对路径时uv sync --active误重建活跃环境的问题。

0.10.12(2026-03-19)

  • Python:新增 PyPy 3.11.15;支持使用 Python 3.6 解释器(对老系统兼容有实际意义);
  • 增强:版本上报包含 uv 的 target triple;--no-emit-package支持逗号分隔多值;
  • 预览uv audit出现在 CLI 帮助中;
  • 修复uv python list改进托管解释器符号链接的报告;移除依赖时保留上一条目行尾注释;abi3 wheel 的 Python 版本视为下界;检测运行 armv7 用户空间的 aarch64 内核的硬浮点支持。
  • 文档:支持版本加入 Python 3.15;Pyodide 移入 Python 支持策略第二档;Rust 与 Python 版本支持移出平台支持策略;Docker 指南按uv-docker-example的变更更新。

总结:0.10 系列升级路径速查

关注点需要做的动作豁免/替代方式
uv venv覆盖已有环境显式加--clear或设置UV_VENV_CLEAR=1--no-clear可覆盖环境变量
多默认 index只保留一个default = true无豁免
未命名 explicit index添加name或删除无豁免
PyPy/GraalPy/Pyodide 可执行名脚本中改用pypy3.10等新名字无豁免
工具链 Python 版本核对全局 pin 是否符合预期显式--python
Docker 镜像换用uv:trixie/uv:alpine3.22/ 新 Python 标签旧标签不再发布
PPC64 大端部署改为源码构建无预构建二进制
--relocatable环境的 csh 激活不再依赖activate.csh无豁免
多凭据认证请求带--username无豁免
exclude-newer变更无需动作(锁文件更稳定)需要升版本时加--upgrade
uv format格式化差异接受 2026 风格或固定 Ruff 版本uv format --version 0.14.14

从发布节奏看,0.10 系列呈现出清晰的演进轨迹:0.10.0 完成语义收紧(把此前的静默行为全部显式化),0.10.1–0.10.4 集中消化边角 panic 与文件系统问题(NFS、根目录 init、只读目录),0.10.5–0.10.6 打磨 Linux 文件复制与锁文件正确性0.10.8–0.10.10 建立镜像分发与uv audit预览能力0.10.11–0.10.12 扩展解释器覆盖面(Python 3.6 解释器支持、CPython 3.15 alpha、PyPy 3.11.15)。如果你正从 0.9.x 升级,最稳妥的路径是:先核对上表中“无豁免”的三项配置类变更,再在 CI 中为uv venv相关流程补上--clear,然后放心地升级到最新的 0.10.12。

参考仓库文件:changelogs/0.10.x.md、crates/uv-cli/src/lib.rs、crates/uv-virtualenv/src/lib.rs、crates/uv-static/src/env_vars.rs、crates/uv/src/commands/python/install.rs、crates/uv/src/commands/workspace/list.rs、crates/uv/tests/python/venv.rs、docs/concepts/python-versions.md。

【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询