
uv 0.7 系列版本全景解析uv version 重定义、索引认证安全策略与构建后端稳定化之路【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv本文基于 uv 仓库的 0.7.x 变更记录 逐条解析该系列 22 个版本0.7.0 至 0.7.22的演进先深入剖析 0.7.0 的十项破坏性变更及其底层实现uv version重定义、first-index认证失败策略、uvx命令校验等再按版本梳理各小版本的增强、Bug 修复与 Python 解释器分发的反复最后给出面向升级场景的兼容性检查清单帮助你理解每项变更对现有工作流的实际影响并安全升级。0.7 系列概览一个谨慎标记为破坏性的里程碑系列uv 0.7 系列从 0.7.02025-04-29 前后发布延续到 0.7.222025 年 7 月下旬横跨约三个月。该系列在 uv 的项目管理时代中具有特殊地位0.7.0 是一个防御性破坏版本官方明确说明这些变更多数出于谨慎被标记为破坏性预期大多数用户无需任何改动即可升级但少数依赖旧行为的工作流确实会受影响Python 解释器分发在该系列中经历了推进—回退—恢复的完整周期0.7.6/0.7.7 引入静态链接 libpython0.7.8 因编译问题回退0.7.9 恢复uv 构建后端uv_build从 0.7.3 开始进入 Preview 迭代最终在 0.7.19 宣告稳定这是该系列最重大的能力性事件。0.7.0 破坏性变更逐一解析uv version重定义为项目版本uv 自身版本移至uv self version这是 0.7.0 中最具话题性的变更。此前uv version显示 uv 工具自身的版本现在它显示或更新当前项目的版本。变更记录中给出的完整交互示例如下$ uv init example Initialized project example at ./example $ cd example $ uv version example 0.1.0 $ uv version --bump major example 0.1.0 1.0.0 $ uv version --short 1.0.0在项目目录之外执行时0.7.0 初期会回退到显示 uv 自身版本并给出警告该回退行为随后被移除见 0.7.2$ uv version warning: failed to read project: No pyproject.toml found in current directory or any parent directory running uv self version for compatibility with old uv version command. this fallback will be removed soon, pass --preview to make this an error. uv 0.7.0 (4433f41c9 2025-04-29)$ uv version --preview error: No pyproject.toml found in current directory or any parent directory从源码结构看这一语义在当前代码库中得到了印证crates/uv/src/commands/project/version.rs 中self_version函数负责显示 uv 自身的版本信息uv self version而 project_version 函数 则负责读取/更新项目的project.version。该文件还体现了 0.7.x 系列后续多个修复的落点--bump组合校验源码--bump stable和--bump post不能与其他 bump 值组合release 组件major/minor/patch最多一个pre-release 组件alpha/beta/rc/dev最多一个且 bump 结果必须大于旧版本否则报错要求改用精确版本号强制更新——这解释了为什么 0.7.21 才支持 pre-release 版本的uv version --bump版本更新后自动重新锁并同步lock_and_sync 在写入新pyproject.toml后执行 lock sync 流程这正是 0.7.7 中Makeuv versionlock and sync修复的体现友好提示当pyproject.toml缺失时MissingProjectVersionError 会提示If you meant to view uvs version, useuv self versioninstead。first-index策略下认证失败不再回退到后续索引这是 0.7.0 中最影响多索引用户的一项策略变更。uv 默认的索引搜索策略是first-index一旦某个索引上找到目标包即停止搜索其他索引。旧版行为是当某个索引返回HTTP 401/403认证失败时uv 将该包视为在此索引上缺失正常缺失是 404于是继续搜索下一个索引。这一行为源于某些索引的非标准响应但降低了认证失败时的索引策略安全性例如凭据错误时可能从错误的索引解析到包。0.7.0 起认证失败被视为停止点uv 不再跨索引继续。若需要恢复旧行为可用index.ignore-error-codes选项按索引声明忽略哪些状态码[[tool.uv.index]] name pytorch url https://download.pytorch.org/whl/cpu ignore-error-codes [401, 403]一个值得注意的特殊处理由于 PyTorch 的索引对包不存在始终返回403而非 404uv 默认对pytorch.org域名的索引忽略该错误码。源码层面该选项在 Index 配置结构 中定义为ignore_error_codes: OptionVecSerializableStatusCode且参与了索引的相等性与排序比较即它会影响索引去重与锁定语义first-index策略本身定义在 IndexStrategy 枚举FirstIndex为默认值。仓库中的集成测试 add_ignore_error_codes 直接验证了这一场景其中还展示了 0.7.0 时期提示信息的演进当索引返回 403 而另一请求成功时uv 会提示用户考虑为该索引添加ignore-error-codes [403]空列表ignore-error-codes []则显式表示不忽略 403覆盖 pytorch.org 的默认特例。uvx要求命令确实由所请求的 Python 包提供此前uvx foo即使foo包不提供任何可执行文件也会去PATH上找foo命令执行。0.7.0 起若请求的包不提供该可执行文件uv 会尽早报错。两个例外保留了灵活性使用--from时不做此检查uvx --from foo bash -c ...这类模式依然合法若可执行文件由foo的依赖包提供也允许——这在包依赖专门的 CLI 子包的场景中很常见。keyring 凭据查找改用索引 URL 而非包 URL在决定查询某个包 URL 所需的凭据时uv 此前把完整的包 URL传给keyring命令但许多 keyring 插件期望收到的是索引 URL通常是包 URL 的父级。0.7.0 起 uv 改为按索引 URL 请求凭据该行为与pip一致。仓库中 crates/uv-keyring/ 即实现了这部分凭据查找逻辑。子命令移除--version标志uv 允许在任意子命令上使用--version如uv run --version。但作为包管理器--version语义需要让位给其他操作例如指定 Python 版本等场景。0.7.0 起--version仅保留在顶层即uv --version。crates/uv/src/lib.rs 中可以看到 uv 在构建子命令时显式disable_version_flag(true)避免从顶层重复携带--versionuv 自身版本的显示入口在 lib.rs 中的self_version调用。其余 0.7.0 破坏性变更托管 Python 下载不再包含 3.7Python 3.7 已 EOL 且不受 uv 正式支持此前在部分平台上仍可下载0.7.0 起移除拒绝非 PEP 751 的 TOML 文件此前传给uv pip install -r foo.toml或uv pip compile -o foo.toml的任意.toml文件都被当作requirements.txt格式处理现在会直接报错。若使用 PEP 751 锁文件且需要自定义文件名请使用标准化格式如pylock.foo.toml.python-version文件中忽略任意字符串请求uv 允许用任意字符串表示 Python 请求按可执行文件名在PATH中查找但该形式写入.python-version非标准且与pyenv-virtualenv把环境名写入该文件冲突。0.7.0 起此类请求在.python-version文件中被忽略未知 dependency-groups 对象说明符报错[dependency-groups]支持对象说明符例如[dependency-groups] foo [pyparsing] bar [{set-phasers-to stun}]但当前规范中唯一合规的对象说明符是include-group。此前 uv 静默忽略未知说明符0.7.0 起改为报错--frozen与--no-sources冲突--no-sources总要求重新解析与--frozen必然失败。0.7.0 起这一冲突直接编码进 CLI 校验空字符串的UV_PYTHON_INSTALL_DIR与UV_TOOL_DIR视为未设置此前空字符串会被解释为当前工作目录0.7.0 起忽略空值与 uv 其他目录类环境变量的行为保持一致。各小版本演进0.7.1 – 0.7.220.7.1 – 0.7.3安全修正与工具链完善0.7.1增强新增BLAKE2b-256哈希支持修复回退 0.7.0 中重定向时恢复认证处理的修复说明 0.7.0 的认证相关改动在首修版即被发现需调整。0.7.2改进可重试错误的 trace 日志self-update 提示从 warning 升级为 erroruv version在带项目特定标志但未找到项目时直接报错移除了 0.7.0 的兼容回退修复预发布 Python 版本的虚拟环境失效判断错误修复托管 Python sysconfig 中clang的补丁uv version现在尊重--project标志。0.7.3增强uv self update --dry-runuv tool list --show-with列出由--with引入的包去重拉取的索引 URLzip 压缩格式扩展至 bzip2、lzma、xz、zstd支持下载GraalPy改进 venv Python 符号链接断裂时的报错Preview构建后端默认启用并补充配置文档、glob 支持转义、构建跨操作系统可复现配置新增uv.toml的python-downloads-json-url选项支持通过 JSON URL 配置自定义 Python 安装源修复若干并发/重试运行问题嵌套 IO 错误重试、broken pipe 流下载重试等并让托管 Python JSON 在编译期 minify 内嵌。0.7.4 – 0.7.5错误体验与凭据脱敏0.7.4增强外部错误附加更多上下文uv add时重装本地包--raw-sources重命名为--raw显示下载进度条按最长名称对齐当所需 uv 版本更新时提示uv self updateDocker 镜像加入 3.14 betaURL 显示时脱敏凭据修复pylock.toml依赖条目误报、cannot-be-a-base URL 导致 panic、.tgz解析尊重真实扩展名、双重自依赖、uv add -r拒绝pylock.toml、缓存剪枝保留带点的 wheel tag、保留 PEP 723 元数据块后的尾随注释Preview构建后端 glob 路径归一化。0.7.5构建后端支持大小写敏感的模块发现Simple 缓存桶升至 v16修复脚本过短于缓冲区的误报等问题。0.7.6 – 0.7.9托管 Python 的推进—回退—恢复周期这是 0.7 系列中最动荡的段落核心围绕 uv 分发的python-build-standalone构建展开0.7.6新增 musl 平台 Python 3.14、musl 平台 free-threaded Python、Python 3.14.0a7在 Linux 上将libpython静态链接进解释器以获得显著提升的解释器启动性能MSRV 升至 Rust 1.85Edition 20240.7.7为规避第三方包错误地假设解释器动态链接 libpython 的问题做兼容在 macOS Apple Silicon 上允许 Python 3.13/3.14 运行时启用实验性 JIT同时修复了uv version的 lock sync 行为0.7.8回退0.7.6/0.7.7 的上述 Python 变更——一次编译错误miscompilation导致解释器行为异常产生涉及str的伪类型错误问题基本隔离在x86_64 Linux至少影响 Python 3.12/3.13/3.14官方在修复验证期间临时回退0.7.9确认修复后恢复被回退的变更。同版本还包含URL 凭据混淆改进、允许uvx运行非默认 Python 实现、Windows 上新增uvw无控制台窗口别名、macOS 上发现 x86-64 托管 Python 构建、uv python list默认每个平台/架构只显示第一个匹配临时环境的pyvenv.cfg写入extends-environment键多项性能优化避免渲染 info 日志、uv-pythonmanylinux 子模块优化等Preview 特性uv add --bounds用于配置版本约束。0.7.10 – 0.7.13凭据、Python 管理与分发扩展0.7.10uv tool list --show-extras动态生成的 sysconfig 替换映射对应 uv-dev 中的 generate_sysconfig_mappings 工具修复 devpi 索引/simple结尾的凭据传播、SSH 占位用户名脱敏误伤等。0.7.11新增Pyodide 支持浏览器内 Python更新一批托管 CPython 版本3.14.0b1、3.13.4、3.12.11、3.11.13、3.10.18、3.9.23降级reqwest/hyper-util修复 IPv6 连接重置问题。0.7.12新增uv python pin --rm移除.python-version固定excluded-newer剔除的版本不再出现在提示中解析失败时提示使用tool.uv.environments/tool.uv.required-environmentsuv sync、uv add、uv remove期间对环境加锁防止竞态uv export为pylock.toml增加--no-editable。0.7.13托管 Python 更新至 3.14.0b2、3.13.5并修复 3.13 的uuid.getnode稳定性uv python pin在版本未找到时自动触发下载基于 TTY 探测决定是否启用 SIGINT 转发Accept-Encoding增加zstd与deflate新增 riscv64 二进制构建Preview 构建后端支持命名空间包。0.7.14 – 0.7.17PyTorch 后端与依赖组能力0.7.14值得单独一提的版本--torch-backend增加ROCm与XPU选项并移除 Preview 标签新增AMD GPU 自动检测新增[tool.uv.dependency-groups].mygroup.requires-python允许每个依赖组声明独立的 Python 版本下限支持 Python 补丁版本透明升级空索引目录警告Docker 镜像开始发布至 DockerHub性能冷解析约提速 10%修复一批锁定/重定向/并发问题requires-python变更处理、win_amd64隐含 marker、索引重定向的 netrc 与同源凭据传播、uv run并发环境更新防护等。0.7.15--index的歧义相对路径警告GitHub fast-path 在限流时跳过schema.json描述保留换行Windows venv 的 minor 版本链接检查Preview 构建后端允许符号链接。0.7.16托管 Python 3.14.0b3lockfile 转换失败时附带路径或 URL~用于 Python 版本且缺补丁版本时警告Preview 默认 Python 安装确保可升级性能上 lock 与 sync 之间共享工作区缓存。0.7.17纯修复版——--with依赖解析时应用构建约束、索引 URL 尾斜杠处理、空的UV_PYTHON_CACHE_DIR被忽略延续 0.7.0 的空环境变量语义、pyvenv.cfg版本冲突报错顺序修正。0.7.18 – 0.7.22构建后端稳定化与收尾0.7.18新增 Windows arm64aarch64的 Python 3.11–3.14 托管构建可通过cpython-version-windows-aarch64显式请求默认仍选 x86-64因其生态支持更广构建虚拟环境在解析与安装间复用。0.7.19uv 构建后端正式稳定。这是 0.7 系列的标志性事件。官方定位它是纯 Python 项目的优秀构建后端合理默认值下多数用户零配置提供灵活配置适配大多数项目结构与 uv 深度集成以改善体验并校验项目元数据与结构以预防常见错误官方给出的性能对比是新项目uv init产物上uv sync比其他构建后端快 10–30 倍。接入方式[build-system] requires [uv_build0.7.19,0.8.0] build-backend uv_build官方同时声明未来版本中它将在uv init中取代hatchling成为默认构建后端且 uv 继续兼容所有标准合规的构建后端。该后端的概念文档见 docs/concepts/build-backend.md当前仓库中版本上界已随迭代更新为uv_build0.12.9,0.13。此外 0.7.19 新增 aarch64 Linux 的PGO 优化Python 分发修复项目/解释器锁获取失败不再致命、sys.prefix纳入缓存环境键避免跨项目--with冲突。0.7.20托管 Python 3.14.0b4Unix 上支持 zstd、PyPy 7.3.20对应 Python 3.11.13uv add --workspace标志Intel GPU 自动检测shebang 写入时丢弃尾随参数命名空间包支持声明多个模块Rust API 层面公开NoSolutionError的ErrorTree。0.7.21恢复 macOS/Linux 托管 Python 的 SQLitefts4/fts5/rtree/geopoly扩展uv sync --python-platformuv version --bump支持 pre-release--with新增-w短选项Windows 崩溃异常处理器新增UV_HTTP_RETRIES环境变量自定义重试次数cache-key 支持符号链接叶子与..路径组件Preview 的uv sync --output-format json。0.7.22GraalPy 升级至 24.2.2新增UV_COMPILE_BYTECODE_TIMEOUT、允许覆盖索引cache-control头、UV_LIBC覆盖多 libc 环境的 libc 选择--all-arches与--only-downloads组合修复跳过返回损坏 MSIX 包代码的 Windows 解释器Preview 中 Windows Python 注册非致命化、新增uv python update-shell。升级与兼容性检查清单基于上述内容从 0.6.x 升级到 0.7.x 时建议按以下清单自查脚本中的uv version若 CI 或 Makefile 用uv version获取 uv 自身版本改为uv self version若在项目中期望读取项目版本则保持uv version并注意它现在会在更新版本后触发 lock sync0.7.7 起且带--bump时校验规则较严格stable/post 不可叠加、release 与 pre-release 各限一个组件。多索引 私有仓库认证若你的私有索引在包不存在时返回 401/403 而非 404升级后解析会停在该索引。按索引添加ignore-error-codes [401, 403]pytorch.org域名的 403 已默认特例处理注意ignore-error-codes []是显式不忽略可覆盖默认特例。uvx用法依赖包本身不提供命令、命令来自 PATH的用法会失效需要运行系统命令时改用uvx --from pkg cmd命令由被装包的依赖提供时无影响。keyring 插件自定义 keyring 插件若按包 URL 记录凭据需改为按索引 URL 记录。--version位置子命令上的--version如uv run --version改为顶层uv --version。.toml需求文件传给uv pip install/compile的自定义.toml需改名PEP 751 锁文件使用pylock.toml或pylock.name.toml命名。.python-version其中非标准的任意字符串请求如 pyenv-virtualenv 写的环境名将被忽略属预期行为。空目录环境变量UV_PYTHON_INSTALL_DIR、UV_TOOL_DIR及后续的UV_PYTHON_CACHE_DIR置为空字符串将不再指向当前目录而是视为未设置。依赖组配置[dependency-groups]中拼错的对象说明符除include-group外从静默忽略变为报错。关键源码与文档索引主题仓库内位置0.7.x 完整变更记录changelogs/0.7.x.mduv version/uv self version实现crates/uv/src/commands/project/version.rs子命令--version禁用crates/uv/src/lib.rsignore-error-codes索引配置crates/uv-distribution-types/src/index.rsIndexStrategyfirst-index等crates/uv-configuration/src/build_options.rs认证失败与 ignore-error-codes 集成测试crates/uv/tests/project/edit.rsuv 构建后端概念文档docs/concepts/build-backend.md0.7 系列的演进轨迹——从 0.7.0 的接口重定义与索引安全收紧到 0.7.6–0.7.9 的托管 Python 回退与恢复再到 0.7.19 构建后端稳定化——集中体现了 uv 在正确性优先原则下的迭代节奏破坏性变更给出明确的迁移路径与配置开关重大基础设施变更在出现问题时敢于回退并快速恢复。【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考