特性
- 🚀 一个工具可以替代 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 等等。
- ⚡️ 比 pip 快 10 到 100 倍。
- 🐍 安装和管理 Python 版本。
- 🛠️ 运行和安装 Python 应用程序。
- ❇️ 运行脚本,支持内置依赖元数据。
- 🗂️ 提供全面的项目管理,具有通用的锁定文件。
- 🔩 包括 pip 兼容接口,以获得熟悉的 CLI 并提高性能。
- 🏢 支持 Cargo 风格的工作区,适用于可扩展的项目。
- 💾 空间高效,具有全局缓存以实现依赖项去重。
- ⏬ 通过 curl 或 pip 无需 Rust 或 Python 即可安装。
- 🖥️ 支持 macOS、Linux 和 Windows。
基本命令
初始化Python项目
跳转到项目文件夹,然后init。
cd work-dir
uv init
初始化后,项目文件夹的结构如下。uv会通过pyproject.toml管理依赖(不同于requirements.txt)、Python的版本,以及项目的基本信息。这个与Javascript的package.json有异曲同工之妙。
同时,uv提倡使用虚拟环境(.venv),从而避免不同项目的Python依赖管理混乱的情况。
.
├── .venv
│ ├── bin
│ ├── lib
│ └── pyvenv.cfg
├── .python-version
├── README.md
├── hello.py
├── pyproject.toml
└── uv.lock
依赖管理
- 添加一个依赖。
uv add dependency-you-need
- 删除一个依赖。
uv remove dependency-you-don't-need
- 更新环境,通常用于获取源码后添加依赖。类似于JS的
npm install。
uv sync
运行
- 运行hello.py
uv run hello.py
- 运行命令
uv run -- command-you-want-to-run
- 提供临时依赖项并运行一个命令
- 创建一个临时的venv
- 安装依赖
- 运行命令
举个例子🌰,运行jupyter。
uv run --with jupyter jupyter notebook
uv run --with 'jupyter,jupyterlab-language-pack-zh-CN' jupyter notebook
pyproject.toml的设置
模板1
比较省事的模板:
- 在
PyPi镜像的选择上,使用了教育网的镜像。在添加依赖的时候,需要使用uv add命令。 - 在
Pytorch的下载上,使用Pytorch的官方源。
[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = []
# Pytorch 设置:要求torch和torchvision采用pytorch-cu124索引(macos除外)
[tool.uv.sources]
torch = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
torchvision = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
torchaudio = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
# 只允许torch从该索引安装,其他走PyPI
explicit = true
# 镜像设置
[tool.uv]
index-url = "https://mirrors.cernet.edu.cn/pypi/web/simple"
模板2
下面的设置模板考虑了以下两点:
- 在
PyPi镜像的选择上,使用了教育网的镜像。在添加依赖的时候,需要使用uv add命令。 - 在
Pytorch的下载上,根据CPU以及GPU的情况分别设置了针对这两种的下载设置。在添加Pytorch的时候,需要使用uv sync --optional gpu命令(注意后面的--optional gpu参数)
[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = []
# (new)根据CPU和GPU进行选择
# 使用命令
# uv sync --optional gpu
[project.optional-dependencies]
cpu = [
"torch",
"torchvision",
"torchaudio",
]
gpu = [
"torch",
"torchvision",
"torchaudio",
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu", extra = "cpu" },
{ index = "pytorch-cu124", extra = "gpu" },
]
torchvision = [
{ index = "pytorch-cpu", extra = "cpu" },
{ index = "pytorch-cu124", extra = "gpu" },
]
torchaudio = [
{ index = "pytorch-cpu", extra = "cpu" },
{ index = "pytorch-cu124", extra = "gpu" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true
# 镜像设置
[tool.uv]
index-url = "https://mirrors.cernet.edu.cn/pypi/web/simple"