0%

uv简介

uv 是由 Astral 团队开发的 Rust 实现的 Python 管理工具,旨在整合常见工具并显著提升性能,它兼具 pipvirtualenvpipxpoetrypyenv 等工具的功能,启动速度极快,依赖解析性能优异。

在博主部署 mcp server 的过程中,发现大多数使用 python 编写的 mcp server 都使用 uv 作为包管理工具。同时,由于 uv 的以下优点:

  • 快! 使用rust编写,安装依赖是并行的,比 pip 和 conda 都快;
  • 现代! 项目结构清晰,依赖写在 pyproject.toml ,依赖版本写在 lock 文件中;
  • 轻! 删除 .venv 文件夹就等于删掉环境;
  • 干净! 不污染系统,不自动写配置,不乱改 .bashrc

作者:Weyne Chen
链接:https://zhuanlan.zhihu.com/p/1896161993444017735

使得 uv 逐渐替代 python 自带的 pip 成为 python 包管理工具。

因此,有必要对 uv 相关内容进行学习。在博主学习 uv 的过程中,对其主要内容作了以下笔记。

uv 是什么

uv 是由 Astral(同样开发 Ruff 的团队)开发的 Rust 实现的 Python 管理工具,旨在整合常见工具并显著提升性能,它兼具 pipvirtualenvpipxpoetrypyenv 等工具的功能,启动速度极快,依赖解析性能优异。

安装 uv

官方安装文档:https://docs.astral.sh/uv/#installation

Linux 安装 uv

使用 curl 下载脚本并通过 sh 执行:

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

如果你的系统没有安装 curl,可以使用 wget

1
$ wget -qO- https://astral.sh/uv/install.sh | sh

若需安装指定版本,在 URL 中包含版本号,例如:

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

Windows 安装 uv

使用 irm 下载脚本,通过 iex 执行:

1
PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

通过改变执行策略从而允许从互联网运行脚本。

如果需安装指定版本,在 URL 中包含版本号,例如:

1
PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.7.17/install.ps1 | iex"

安装完成后可执行 uv --help 验证是否安装成功。

uv 常用命令

包和依赖管理

1
2
3
4
5
uv pip install <package>         # 安装包
uv pip install -r requirements.txt # 从 requirements 文件安装
uv pip uninstall <package> # 卸载包
uv pip freeze > requirements.txt # 输出当前环境依赖
uv pip list # 列出已安装包

管理虚拟环境

1
2
uv venv                          # 在当前目录创建 `.venv`
uv venv --python 3.11 # 使用指定 Python 版本

如果要删除环境,直接删除项目目录下的 .venv 软件夹即可。

运行脚本&工具

1
2
3
4
uv run myscript.py              # 在隔离环境中执行 Python 脚本
uv run pytest # 在项目虚拟环境中运行 pytest
uvx ruff # 使用 uvx(alias)临时运行命令行工具(如 pipx)
uv tool install ruff # 安装并永驻 ruff 可执行文件

uvx 是执行工具的快捷方式,与 uv tool run 等价。

管理项目依赖与锁定

1
2
3
4
5
6
uv add <pkg>                    # 添加依赖并更新 pyproject.toml
uv remove <pkg> # 删除依赖
uv sync # 同步依赖,生成 venv
uv lock # 更新锁文件 uv.lock
uv tree # 显示依赖树
uv export # 导出锁文件为其他格式

这里提到了 python 项目管理中比较重要的两个文件:

  • pyproject.toml:项目配置文件,可以手动维护它,也可以通过命令如 uv adduv remove 来同步更新它。

    • 作用:定义项目需求与设置,偏向“意图”层面,指定需要哪些依赖及其版本范围。
  • uv.lock: 由 uv 自动生成和管理的锁定文件,它记录了完全确定的依赖树,包括每个包的确切版本、依赖关系及对应平台信息。

    • 通常位于项目根目录,与 pyproject.toml 并列,并应提交到版本控制系统,以保证团队和 CI/CD 中依赖环境一致性
文件作用操作方式
pyproject.toml声明项目依赖范围及配置手动编辑 或 使用 uv add / uv remove
uv.lock锁定并记录依赖的具体版本及环境自动生成/更新(uv sync, uv lock,uv run

构建与发布包

1
2
uv build                        # 构建源码分发包和 wheel
uv publish # 上传到 PyPI 等索引

管理 uv 工具自身

1
2
3
4
5
uv self version                # 查看当前版本
uv self update # 更新 uv 工具
uv cache clean / prune / dir # 管理缓存
uv generate-shell-completion # 生成 shell 自动补全脚本
uv help # 查看命令帮助
---------------The End---------------