Python 项目依赖和解释器各管各的,uv 官方入门先收住哪几步?

仓库里 requirements.txt 钉的是一套版本,本机 pyenv 另一套,CI 镜像又是第三套。有人只想把 pip 装包变快一点,有人想连解释器版本也收进仓库。uv 文档首页 把自己写成包与项目管理器:依赖、锁文件、Python 版本、工具安装都在同一条 CLI 里。下面按官方安装页和项目指南走入门,不写成「立刻扔掉所有旧工具」的宣言。多语言版本若还在用 mise 一类统一器,差别见站内这篇:多语言工具链版本满天飞,mise 能不能先统一本机的 Node 和 Go?。本文只谈 Python 专线。

先装上,再分清几条用法

安装页 推荐独立安装脚本。macOS / Linux 示例:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows 用 PowerShell 拉 install.ps1。也可用 Homebrew、WinGet、pipx / pip 等。独立安装器装上的可以用 uv self update 自升,包管理器装的则走对应升级通道。安装脚本支持在 URL 里钉具体版本,不想飘在 latest 上时可以按安装页写法锁死。

首页把能力拆成几块,入门时先分清:

  • 项目管理:uv init / uv add / uv sync / uv lock / uv run
  • 脚本:单文件带内联依赖元数据,再用 uv run
  • 工具:uvx / uv tool install(类似「装一个 CLI 工具」)
  • Python 版本:uv python install、uv python pin
  • 兼容层:uv pip …,给还想沿用 pip 心智的工作流加速

只把 uv 当「更快的 pip」也能干活,但官方项目路径的收益在锁文件和解释器钉死,不只是下载速度。工具安装(uv tool install ruff 一类)和项目依赖是两条线,别把全局 CLI 和仓库 .venv 混成一谈。

项目路径:init、锁、sync

项目指南 示例是 uv init 生成 pyproject.toml、.python-version、src/… 等。第一次跑 uv run、uv sync 或 uv lock 时,还会出现 .venv 和跨平台的 uv.lock。

依赖用 uv add 写入 pyproject.toml,并更新锁文件与环境。uv remove 反向操作。日常对齐环境用 uv sync:按锁文件把 .venv 装齐。uv run 在执行前会核对锁文件与环境有没有跟上 pyproject.toml,减少「我本机能跑、同事缺包」的口子。需要手动激活时,也可以 uv sync 之后再 source .venv/bin/activate,指南对 Windows 激活写法也有对应示例。

.python-version 记录项目默认解释器。需要本机还没有的版本时,用 uv python install 拉,再用 uv python pin 钉在目录里。这样「依赖」和「Python 大版本」都进仓库约定,而不是口头约定。CI 镜像里的解释器小版本,尽量跟 pin 对齐,少靠「镜像刚好装了 3.x」碰运气。

uv.lock 官方写明应提交版本库,手工改锁文件不合适。从旧 requirements.txt 迁时,可以用 uv add -r requirements.txt 一类方式灌进项目依赖,再逐渐以 pyproject.toml + lock 为主。单独升某个包可用 uv lock --upgrade-package 包名,指南里有示例。

和「只加速 pip」差在哪

首页提供 uv pip compile / uv pip sync / uv venv 等接口,方便旧流水线少改命令。那条路径仍然偏「需求文件 + 虚拟环境」。项目路径则把元数据放进 pyproject.toml,用 uv.lock 做可复现安装,并用 uv run 保证命令落在正确环境里。

两种都能用。新项目可以直接走 uv init + sync。存量仓库可以先 uv pip 顶住速度,再择机迁到项目心智。私有索引、凭证怎么配,以官方文档为准,别走来路不明的镜像野路子。脚本场景若只有一个 .py,也可以按首页用内联依赖元数据,不必强行先建成完整包布局。

团队若已经有 poetry / pip-tools 锁文件,也不必第一天强制对翻。先在一条旁路流水线用 uv sync 或 uv pip sync 对一下解析结果,再决定主路径何时切。首页写的「可替换多种旧工具」是能力说明,不是迁移日程表。

你们是先用 uv pip 加速现有 CI,还是新仓直接 uv init?.python-version 有没有和镜像 tag 绑在一起,也可以聊聊。