UV 包管理工具

uv 可以统一管理 Python 版本、虚拟环境、项目依赖、锁文件和 Python 命令行工具。推荐的职责划分是:

pacman 管理 uv uv 管理 Python uv 管理每个项目的虚拟环境与依赖

普通项目不需要手动执行 pip install,也通常不需要激活虚拟环境。日常主要使用 uv inituv adduv syncuv run

安装 uv

Arch Linux 直接从官方仓库安装:

sudo pacman -S uv

确认安装结果:

uv --version

不建议使用 sudo pip install uv,因为这会绕过 pacman 修改系统 Python。pip install uv 虽然可用,但 uv 会依附于当前 Python 环境,不适合作为全局项目管理工具。

创建项目

正式项目可以直接放在 ~/workspace

cd ~/workspace uv init network-tools cd network-tools

基础目录结构:

network-tools/ ├── .gitignore ├── .python-version ├── README.md ├── main.py └── pyproject.toml

第一次添加依赖或同步环境后,还会生成:

.venv/ uv.lock

各文件的职责:

文件作用是否提交 Git
pyproject.toml声明项目元数据和直接依赖
uv.lock锁定完整依赖树的精确版本
.python-version固定项目使用的 Python 版本建议提交
.venv/当前机器上的项目虚拟环境

管理 Python

安装 Python 3.13:

uv python install 3.13

让当前项目固定使用 Python 3.13:

uv python pin 3.13

查看 uv 能发现或安装的 Python:

uv python list

查看项目实际使用的 Python:

uv run python --version

uv 管理的 Python 与 Arch 系统 Python 相互独立,可以减少系统滚动更新对项目环境的影响。

添加依赖

添加普通依赖:

uv add requests

一次添加多个依赖:

uv add requests pydantic rich

添加开发依赖:

uv add --dev pytest ruff

指定版本范围:

uv add "fastapi>=0.115,<1.0"

添加 Git 仓库中的包:

uv add git+https://github.com/example/project.git

uv add 会同时更新 pyproject.tomluv.lock.venv。不要再用普通 pip install 修改项目环境,否则实际环境可能与项目声明不一致。

删除依赖

uv remove requests

uv 会自动更新项目声明、锁文件和虚拟环境。

运行项目

运行 Python 文件:

uv run python main.py

运行 Python 模块:

uv run python -m mypackage

运行项目中的工具:

uv run pytest uv run ruff check . uv run uvicorn main:app --reload

uv run 会自动使用当前项目的 .venv,并在需要时同步环境,因此一般不必手动激活虚拟环境。

激活虚拟环境

uv run是一种临时运行虚拟环境的方法,如果需要执行多行命令,也可以直接激活虚拟环境,不同终端激活的方式不同。

以arch的Fish终端为例

# cd到项目目录下 source .venv/bin/activate.fish # 退出环境 deactivate

如果是传统的linux终端,例如bash或者zsh,可以使用如下激活命令

# cd到项目目录下 source .venv/bin/activate # 退出环境 deactivate

同步环境

根据 pyproject.tomluv.lock 创建或恢复环境:

uv sync

常见使用场景包括:

  • 刚克隆项目
  • 删除了 .venv
  • 切换了 Git 分支
  • 拉取到了新的 uv.lock
  • 项目依赖发生变化

克隆项目后的标准流程:

git clone <仓库地址> cd <项目目录> uv sync uv run python main.py

严格使用现有锁文件,不允许自动修改:

uv sync --frozen

只安装生产依赖:

uv sync --no-dev

CI 和生产部署更适合使用 uv sync --frozen

更新依赖

更新锁文件中的全部依赖:

uv lock --upgrade uv sync

只更新指定依赖:

uv lock --upgrade-package requests uv sync

如果还要修改项目允许的版本范围,直接重新添加:

uv add "requests>=2.33"

查看依赖

查看完整依赖树:

uv tree

检查锁文件是否需要更新:

uv lock --check

查看项目声明:

cat pyproject.toml

激活虚拟环境

通常直接使用 uv run 即可。需要交互式调试时,Fish 使用:

source .venv/bin/activate.fish

退出虚拟环境:

deactivate

Bash 和 Zsh 使用:

source .venv/bin/activate

迁移旧项目

已有 requirements.txt

cd ~/workspace/old-project uv init uv add -r requirements.txt

如果项目已经包含 pyproject.toml,不需要再次初始化:

cd ~/workspace/old-project uv sync

临时运行工具

使用 uvx 临时运行工具,不把它加入项目依赖:

uvx ruff check . uvx black . uvx httpie

等价写法:

uv tool run ruff check .

如果项目长期依赖某个工具,应把它声明为开发依赖:

uv add --dev ruff uv run ruff check .

管理全局工具

安装全局 Python 命令行工具:

uv tool install ruff uv tool install httpie

查看、升级和卸载:

uv tool list uv tool upgrade ruff uv tool uninstall ruff

全局工具适合通用 CLI,不应用来安装项目依赖。

Git 提交约定

应该提交:

pyproject.toml uv.lock .python-version

不应该提交:

.venv/ __pycache__/ .pytest_cache/ .ruff_cache/

uv init 通常会生成基础 .gitignore,仍应在提交前检查一次。

常用命令

# 创建项目 uv init my-project cd my-project # 固定 Python uv python pin 3.13 # 添加依赖 uv add requests uv add --dev pytest ruff # 运行项目与工具 uv run python main.py uv run pytest uv run ruff check . # 删除依赖 uv remove requests # 恢复环境 uv sync # 更新依赖 uv lock --upgrade uv sync # 查看依赖树 uv tree