Python 包管理神器 - UV
前言
好久没写 Python 了,试了下 uv,如果单纯是写 Python 的话,uv 比 conda 好用多了。
Python 生态的包管理工具也有几种,比如 pip conda poetry。
前两天尝试了一下 uv,uv 是 Python 生态明星公司 Astral 基于 Rust 编写的包管理工具,旨在成为 Python 的 Cargo。
与其他的 Python 包管理工具相比,uv 在性能、兼容性和功能上都有出色表现,为 Python 项目开发带来了新的了快速、可靠且易用的包管理体验。
uv 的 Github 仓库:
git:[@github/astral-sh/uv]
优势
以下摘录自 Gemini:
- 超快速度: 使用Rust编写,实现惊人的速度,依赖解析和安装比pip快10-100倍,极大地缩短等待时间。
- 一站式工具: 整合了包管理、虚拟环境创建、Python版本管理等功能,一个工具(uv)就能替代pip, venv, pip-tools, poetry等多个工具。
- 高效依赖管理: 强大的依赖解析能力,支持锁文件(uv.lock)来确保环境可复现,避免“在我机器上能跑”的问题。
- 磁盘空间优化: 维护全局缓存,利用硬链接/重定向技术,节省磁盘空间,尤其在管理多个环境时。
- 兼容性强: 完全兼容标准的
requirements.txt和pyproject.toml文件,提供平滑的迁移路径。 - 开发体验友好: 提供更清晰的错误信息,支持类似Cargo的工作区,并且跨平台一致性好。
实在是懒得写了,就记录一下基本用法吧。
有点类似 pnpm,非常像啊,Python 界的 pnpm
安装
有如下几种方式:
# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# With pip.
pip install uv
使用
ubuntu@VM-8-15-ubuntu:~$ uv --help
An extremely fast Python package manager.
Usage: uv [OPTIONS] <COMMAND>
Commands:
auth Manage authentication
run Run a command or script
init Create a new project
add Add dependencies to the project
remove Remove dependencies from the project
version Read or update the project's version
sync Update the project's environment
lock Update the project's lockfile
export Export the project's lockfile to an alternate format
tree Display the project's dependency tree
format Format Python code in the project
tool Run and install commands provided by Python packages
python Manage Python versions and installations
pip Manage Python packages with a pip-compatible interface
venv Create a virtual environment
build Build Python packages into source distributions and wheels
publish Upload distributions to an index
cache Manage uv's cache
self Manage the uv executable
help Display documentation for a command
基础指令如上。
常见用法
# 1. 创建项目
uv init my_project
cd my_project
# 2. 添加依赖
uv add requests
# 3. 生成锁文件
uv lock
# 4. 安装依赖到虚拟环境
uv sync
# 5. 运行代码
uv run main.py
核心命令
| 命令 | 作用 |
|---|---|
uv init |
创建新项目 |
uv add |
添加依赖 |
uv remove |
删除依赖 |
uv lock |
生成 / 更新 lockfile |
uv sync |
同步虚拟环境 |
uv run |
在项目环境中运行命令 |
uv pip |
pip 兼容接口 |
uv tree |
查看依赖树 |
uv python |
管理 Python 版本 |
uv tool / uvx |
运行 CLI 工具 |
uv build |
构建包 |
uv publish |
发布包 |
依赖管理
添加依赖
uv add numpy
添加开发依赖
uv add --dev pytest
使用依赖分组
uv add --group lint ruff
删除依赖
uv remove numpy
运行代码与脚本
运行 Python 文件
uv run main.py
运行工具(pytest、ruff 等)
uv run pytest
uv run ruff check .
临时依赖运行
uv run --with requests script.py
Python 版本管理
安装 / 切换 Python
uv python install 3.12
uv python pin 3.12
项目根目录会生成:
.python-version
CLI 工具(uvx / tool)
类似 pipx,但更快、更轻量。
临时运行工具
uvx pycowsay "Hello uv"
安装工具
uv tool install ruff
打包与发布
构建 wheel / sdist
uv build
发布到 PyPI
uv publish
脚本模式(Shebang)
支持 单文件脚本 + 自动依赖安装。
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = [
# "requests",
# ]
# ///
import requests
print(requests.__version__)
chmod +x script.py
./script.py
推荐工作流
日常开发
uv init
uv add xxx
uv lock
uv sync
uv run main.py
团队协作
- 只提交:
pyproject.tomluv.lock
- 不提交:
.venv/
总结
以后再写 Python,我肯定是选 uv 了,确实比 pip conda 系列的好用太多了,用的很舒服,以上使用操作部分是 AIGC,不一定正确,欢迎勘误,不过应该大差不差,简单的看了一下是没什么问题。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Swaggy Macro
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果


