Python 套件管理器 uv 使用介绍

1122 字
6 分钟
Python 套件管理器 uv 使用介绍

写在前面#

Python 生态得益于大数据时代和大模型时代蓬勃发展,相应的包管理工具也不断涌现,这篇文章简单记录一下个人上手 Astral 团队开发的 uv 的一些基操和使用一段时间后的体验。当然其实官方文档1已经很详细了。

Warning

如有错误,欢迎指正!

1. What’s uv?#

Note

An extremely fast Python package manager. —— 开发者原话

  • 一款现代化的 Python 包管理暨打包(packing)工具;
  • 高性能,安装依赖速度比传统工具提升几十倍(得益于 Rust);
  • 一大特色,或者说最大优点是对 Python 版本的管理,不必再搭配 pyenv 等工具;
  • 跨平台支持,适用多种开发环境
  • 热 Cache 机制设计,二次构建快

2. Why uv ?#

下表转载自 Shoukai Huang 大佬的博客2 整理的横向对比:

功能特性UVpip+virtualenvCondaPoetry
实现语言RustPythonPythonPython
速度比pip快10-100倍基准线慢于pip快于pip
内存使用非常高效较高高中等
环境管理内置需要单独工具内置内置
依赖解析快速、现代解析器基础全面现代解析器
非Python包支持否否是否
锁文件是否(基本requirements.txt)是是
项目结构化是否否是
包发布是是(需要twine)是是
兼容性与现有pip生态系统兼容标准Python工具自有生态系统更固执己见的方法
错误处理清晰的错误信息基本良好良好
资源占用最小中等重中等
科学计算焦点否否是否
跨平台一致性是有限优秀良好

总而言之:

  • uv vs. pip + virtualenv
    • 快,跨环境
  • uv vs. Conda
    • 太臃肿了 Conda 我说,而且环境一多比较慢
  • uv vs. Poetry
    • 常用指令少且简洁,相比之下 Poetry 的学习成本就有点偏高了
    • 内建了对 Python 的版本管理功能
    • 兼容 pip, pip-tools
  • uv vs. pyenv
    • 并非竞品,pyenv 只是用于管理多个 Python 版本的工具(一般是 Poetry + pyenv 组合),与 uv 的不同是以源码编译的方式安装 Python

如果你还在使用 pip,那我觉得针对大型项目,亦或是中小型项目,不妨跳出舒适圈,试试更舒适(纯主观)的 uv 吧?

3. How to use uv?#

3.1 Installation#

以下内容在 macOS 系统上进行。

Terminal window
# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# or use Homebrew on macOS
brew install uv

使用 Python 的第三方库 pypi 安装当然也没问题:

Terminal window
pip install uv
# Or pipx.
pipx install uv

如需更新:

Terminal window
uv self update

安装成功!
安装成功!

3.2 Use#

常用指令:

uv help
uv help

以搭建一个 Python 项目环境为例:

  1. uv python install 安装 Python (系统已安装跳过即可);

  2. uv python list 查看已安装的 Python 版本;

Python List
Python List

  1. uv init 在新项目的根目录下执行,初始化新项目;

可以观察到其贴心的给你生成了以下文件,并自动使用 git 进行版本管理:

.
├── .git
├── .gitignore
├── .python-version
├── main.py
├── pyproject.toml
└── README.md
  1. 创建虚拟环境;

你可以直接 uv run main.py 执行示例文件,uv 会自动为你创建虚拟环境:

uv run
uv run

通过 uv venv --python=3.10 手动创建并指定版本当然也没问题,然后激活 source .venv/bin/activate 一下。

  1. 安装依赖;

直接看下文的速查表吧。

3.3 速查表#

3.3.1 环境管理#

操作UV 命令
创建虚拟环境uv venv
创建指定 Python 版本的虚拟环境uv venv --python=3.12
激活虚拟环境source .venv/bin/activate

3.3.2 包管理#

操作UV 命令
安装单个包uv pip install pandas
从 requirements.txt 安装uv pip install -r requirements.txt
安装当前项目uv pip install -e .
安装开发依赖uv pip install -e ".[dev]"
生成锁文件uv pip compile requirements.in -o requirements.txt
升级单个包uv pip install --upgrade pandas

3.3.3 项目管理#

操作UV 命令
添加依赖uv add pandas
移除依赖uv remove pandas
同步环境uv sync
升级特定包uv sync --upgrade-package pandas
升级所有包uv lock --upgrade
运行脚本uv run python main.py
构建项目uv build
查看项目依赖关系树uv tree

其中,管理依赖可以通过 group 参数来区分开发和生产环境,例如:

Terminal window
uv add --group dev pandas
uv add --group production requests

3.3.4 工具管理#

uvx,即 uv tool run 的简写,顾名思义是用于调用 Python 工具,是 pipx 的替代品。

4. 参考资料#

Footnotes#

  1. uv 官方文档, https://docs.astral.sh/uv/ ↩

  2. UV:下一代Python包管理工具的全面指南, https://apframework.com/blog/essay/2025-06-07-Python-UV ↩

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Python 套件管理器 uv 使用介绍
https://blog.yokumi.cn/posts/introduction-to-python-package-manager-uv/
作者
Yokumi
发布于
2025-09-05
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
浅谈大型项目的模块化开发(Based on Python)
开发心得最近在进行大型项目开发时,自行实现的一些公共模块,包括工具库、API 客户端等,都被扔在一个文件夹下,需要时由该项目的控制代码进行调用,不过因为水平之菜,经过测试没什么问题的代码 PR 上去之后经常会出现需要反复修改的情况。而且另一方面,这些公共模块具有一定的可移植性,但只被一个项目使用,没什么性价比,肯定是需要进一…
2
NSFC 数据爬取
开发心得从国家自然科学基金大数据知识管理服务门户爬取论文数据。 在网页的 JavaScript 文件中,尝试寻找相关的解密代码,最终在app.17b88e26.js中找到以下内容(注释为后期补充): 使用 Python 的 pycryptodome 库来实现解密:
3
第一台 VPS 折腾小记
开发心得在使用本项目/教程/脚本之前,请务必仔细阅读以下声明。一旦您开始使用、复制或修改相关内容,即视为您已完全接受并同意本免责声明的所有条款。 请谨记:使用技术时请务必遵守您所在国家和地区的法律法规。 使用 IPv6-only VPS 低成本独享家宽,解锁 ChatGPT 不风控
4
2026.5 Live Repo
生活杂谈翻了翻相册才发现上一次已经是去年 9 月的羊文学了,哎gszm坏事做尽。 这回的出行方式是经典京沪高铁二等座,去年锅贴得意之作绿皮 D9 真给我坐麻了,这次果断 G 系列。不过被课表背刺,本来还可以买早一班(),结果就是快 0 点才到虹桥。好像是第一次这么晚到沪国。
5
在 Linux 下编译安装 Dynamips 和 Dynagen 搭建 Cisco 实验环境
开发心得最终还是花了一点时间把计网实践的实验平台搞到 Linux 下实现了,相比于 Windows,同样配置的路由器,Linux 下 CPU 占用可降低 50% 以上,应该也会更加稳定吧。 本文将详细介绍如何在 Linux (Ubuntu/Debian) 系统下(macOS 等也是类似的,一些依赖的安装略有不同罢了)从源码编…

评论区

文章目录