uv
是由 Astral 团队开发的 Rust 实现的 Python 管理工具,旨在整合常见工具并显著提升性能,它兼具pip
、virtualenv
、pipx
、poetry
、pyenv
等工具的功能,启动速度极快,依赖解析性能优异。
在博主部署 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 管理工具,旨在整合常见工具并显著提升性能,它兼具 pip
、virtualenv
、pipx
、poetry
、pyenv
等工具的功能,启动速度极快,依赖解析性能优异。
安装 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 | uv pip install <package> # 安装包 |
管理虚拟环境
1 | uv venv # 在当前目录创建 `.venv` |
如果要删除环境,直接删除项目目录下的 .venv
软件夹即可。
运行脚本&工具
1 | uv run myscript.py # 在隔离环境中执行 Python 脚本 |
uvx
是执行工具的快捷方式,与 uv tool run
等价。
管理项目依赖与锁定
1 | uv add <pkg> # 添加依赖并更新 pyproject.toml |
这里提到了 python 项目管理中比较重要的两个文件:
pyproject.toml
:项目配置文件,可以手动维护它,也可以通过命令如uv add
、uv remove
来同步更新它。- 作用:定义项目需求与设置,偏向“意图”层面,指定需要哪些依赖及其版本范围。
uv.lock
: 由 uv 自动生成和管理的锁定文件,它记录了完全确定的依赖树,包括每个包的确切版本、依赖关系及对应平台信息。- 通常位于项目根目录,与
pyproject.toml
并列,并应提交到版本控制系统,以保证团队和 CI/CD 中依赖环境一致性
- 通常位于项目根目录,与
文件 | 作用 | 操作方式 |
---|---|---|
pyproject.toml | 声明项目依赖范围及配置 | 手动编辑 或 使用 uv add / uv remove |
uv.lock | 锁定并记录依赖的具体版本及环境 | 自动生成/更新(uv sync , uv lock ,uv run ) |
构建与发布包
1 | uv build # 构建源码分发包和 wheel |
管理 uv 工具自身
1 | uv self version # 查看当前版本 |