Skip to content

uv 锁文件:本地能跑,CI 为什么还会失败 ​

先区分“依赖需求”“解析结果”和“本机环境”。术语定义见 锁文件,本文只讲排障步骤。

三份内容不能混为一谈 ​

pyproject.toml 声明需求,uv.lock 固定解析结果,.venv/ 是当前机器安装好的环境。只在本机手工安装一个包,别人拉代码后不一定能复现。

一次检查的顺序 ​

在项目根目录按目的选择命令,不必全部运行:

bash
uv lock --check
uv sync --locked
uv run --locked python -c "import sys; print(sys.version)"

第一条检查声明与锁文件的一致性;后两条在需要改锁时失败。--frozen 跳过一致性检查,适合特定构建分层,不能替代 CI 的一致性校验。

如果刚改了依赖,先用 uv lock 生成解析结果,审查变化,再把声明与锁文件一起提交。升级和冲突合并也先看需求,不为消除冲突直接删锁文件。

还会有哪些差异 ​

锁文件不锁操作系统、驱动和外部服务。确认 Python 版本、依赖组、extras 及平台条件,再比较本地与 CI。同步可能移除不属于目标依赖集合的包,项目依赖应通过项目配置维护。

参考:uv 锁定与同步。命令语义复核:2026-10-14;本文未声称对任意项目实际执行上述命令。

基于 VitePress 构建