UV 使用教程(适配 Ubuntu 24.04 LTS)
前言
UV 是由 Astral 公司开发的下一代 Python 包管理工具,旨在替代 pip、venv、pip-tools 等传统工具,核心优势是极致的速度(依赖解析速度比 pip 快 10-100 倍)、一站式功能(集成虚拟环境、依赖解析、锁文件、缓存管理)、原生兼容 Ubuntu 系统,同时完全兼容 Python 生态(支持 、)。它可以很方便地管理一台电脑上不同的 Python 版本,是运行不同环境下程序的好帮手。
介绍在 Ubuntu 24.04 LTS 环境下使用 UV 进行 Python 包管理的完整教程。UV 是 Astral 开发的下一代工具,替代 pip 和 venv,具备极速解析、虚拟环境集成及锁文件支持。内容包括安装验证、初始化项目、依赖管理(add/remove/sync)、虚拟环境操作、缓存清理及工程化实践。通过 uv init 创建项目,uv add 安装依赖,uv run 运行脚本,配合 pyproject.toml 和 uv.lock 实现环境一致性。适合需要高效管理 Python 开发环境及部署的场景,特别兼容大模型依赖如 torch 和 transformers。
UV 是由 Astral 公司开发的下一代 Python 包管理工具,旨在替代 pip、venv、pip-tools 等传统工具,核心优势是极致的速度(依赖解析速度比 pip 快 10-100 倍)、一站式功能(集成虚拟环境、依赖解析、锁文件、缓存管理)、原生兼容 Ubuntu 系统,同时完全兼容 Python 生态(支持 、)。它可以很方便地管理一台电脑上不同的 Python 版本,是运行不同环境下程序的好帮手。
pyproject.tomlrequirements.txtUbuntu 24.04 LTS 已满足 UV 运行要求(glibc 2.35+),无需额外依赖,直接安装即可。
| 系统 | 支持版本 | 核心依赖 |
|---|---|---|
| Linux | Ubuntu 20.04+、CentOS 8+ | glibc 2.28+ |
打开终端,执行官方安装脚本(自动适配 x86_64 架构,无 sudo 权限也可安装):
curl -LsSf https://astral.sh/uv/install.sh | sh
~/.cargo/bin/(依赖 Rust 的 cargo 环境,脚本会自动处理);~/.cargo/bin/ 加入用户环境变量 PATH。安装完成后,重启终端(使环境变量生效),执行以下命令验证:
uv --version # 示例输出:uv 0.4.14 (a1b2c3d 2026-01-01) # 版本号可能更新
若提示 uv: command not found,手动添加环境变量并重启终端:
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
如需卸载,执行以下命令(彻底清理安装文件和缓存):
# 删除 UV 二进制文件
rm -f ~/.cargo/bin/uv
# 清理 UV 缓存(可选,释放磁盘空间)
rm -rf ~/.cache/uv
# 清理 UV 配置文件(可选)
rm -rf ~/.config/uv
在使用 UV 前,先理解 4 个核心概念,避免操作误区:
| 概念 | 作用 | 对应文件/目录 |
|---|---|---|
| 虚拟环境 | 隔离项目依赖,避免全局 Python 环境污染(Ubuntu 系统 Python 需保留系统依赖) | .venv/(项目根目录,默认隐藏) |
| pyproject.toml | 项目配置文件,定义依赖、Python 版本、项目元信息(替代 requirements.txt) | 项目根目录/pyproject.toml |
| uv.lock | 依赖锁文件,记录所有依赖(含间接依赖)的精确版本(保证多环境一致性) | 项目根目录/uv.lock |
| 缓存 | 存储下载的依赖包、编译后的扩展,避免重复下载/编译(节省时间和带宽) | ~/.cache/uv(用户级缓存目录) |
进入你的 Python 项目目录(如 ~/coding/sxu_202501_v2),执行 uv init 完成项目初始化,自动创建虚拟环境和配置文件:
# 进入项目目录(替换为你的实际项目路径)
cd ~/coding/sxu_202501_v2
# 初始化项目(默认创建虚拟环境 +pyproject.toml+uv.lock)
uv init
Ctrl + H 可查看隐藏目录)sxu_202501_v2/
├── .venv/ # 自动创建的虚拟环境(隐藏目录,包含独立 Python 解释器)
├── pyproject.toml # 项目配置文件(依赖、Python 版本等)
└── uv.lock # 依赖锁文件(自动生成,不可手动编辑)
# 指定 Python 版本(Ubuntu 24.04 默认 Python 3.12,可指定其他已安装版本)
uv init --python 3.12
# 不自动创建虚拟环境(仅生成配置文件,适合手动管理环境)
uv init --no-venv
# 指定项目名称和作者(会写入 pyproject.toml)
uv init --name "auto-grading-agent" --author "lemon <[email protected]>"
# 初始化时直接安装依赖(如 numpy、transformers)
uv init --python 3.12 --add numpy transformers
UV 的虚拟环境默认与项目绑定(.venv/),无需手动创建,核心操作如下:
激活后终端前缀会显示 (.venv),表示已进入隔离环境(所有操作仅对当前项目生效):
source .venv/bin/activate
# 查看当前 Python 解释器路径(应指向.venv/bin/python)
which python # 示例输出:/home/lemon/coding/sxu_202501_v2/.venv/bin/python
# 查看当前 pip 路径(应指向.venv/bin/pip)
which pip
deactivate
# 查看虚拟环境路径
uv venv --path # 示例输出:/home/lemon/coding/sxu_202501_v2/.venv
# 查看虚拟环境中已安装的依赖
uv pip list
# 方法 1:UV 内置命令(推荐,安全清理)
uv venv --remove
# 方法 2:手动删除(等价于内置命令)
rm -rf .venv
UV 的依赖管理围绕 pyproject.toml 展开,兼容传统 requirements.txt,核心命令是 uv add(安装)、uv remove(卸载)、uv sync(同步)。
# 安装最新稳定版(如 requests、transformers)
uv add requests
uv add transformers
# 安装指定版本(避免版本兼容问题)
uv add requests==2.31.0
uv add transformers==4.41.0
# 安装版本范围(允许自动更新小版本)
uv add requests>=2.28.0,<3.0.0
uv add torch>=2.0.0,<2.5.0
# 安装 Git 仓库中的依赖(如自定义分支的包)
uv add git+https://github.com/huggingface/transformers.git@main
开发依赖不会被打包到生产环境,用 -d/--dev 标记:
# 安装单个开发依赖(如 pytest 用于测试)
uv add pytest -d
# 安装多个开发依赖(代码格式化、lint 等)
uv add black flake8 isort mypy -d
requirements.txt 导入依赖(兼容旧项目)如果你的项目已有 requirements.txt,可直接导入到 pyproject.toml:
# 导入生产依赖
uv add -r requirements.txt
# 导入开发依赖(需单独创建 requirements-dev.txt,新手跳)
uv add -r requirements-dev.txt -d
# 卸载单个生产依赖
uv remove requests
# 卸载多个生产依赖
uv remove numpy pandas
# 卸载开发依赖
uv remove pytest -d
# 更新单个依赖到最新版(按 pyproject.toml 的版本约束)
uv add requests@latest
# 更新所有生产依赖到最新兼容版本
uv sync --upgrade
# 更新所有依赖(包括开发依赖)到最新兼容版本
uv sync --upgrade --dev
# 强制更新所有依赖到最新版(忽略版本约束,可能导致兼容问题,不建议使用)
uv sync --upgrade-all
当 pyproject.toml 或 uv.lock 变更(如拉取他人代码、更新依赖),执行 uv sync 同步本地环境:
# 同步生产依赖 + 开发依赖(本地开发用)
uv sync
# 仅同步生产依赖(部署到服务器时用)
uv sync --no-dev
# 同步时强制重新安装所有依赖(修复环境异常)
uv sync --force
UV 提供 uv run 命令,无需手动激活虚拟环境,直接使用项目环境运行代码(避免误操作全局环境):
# 运行你的项目脚本
uv run main.py
# 运行带参数的脚本(如传入配置文件、数据路径)
uv run main.py --config config.yaml --data ./data
# 运行 Python 交互环境(使用项目虚拟环境的 Python)
uv run python
# 运行开发工具(如 pytest 测试、black 格式化)
uv run pytest tests/
uv run black src/
uv run flake8 src/
pyproject.toml 是 PEP 621 标准的项目配置文件,UV 生成的默认内容如下(带详细注释):
[project]
name = "auto-grading-agent" # 项目名称(初始化时指定)
version = "0.1.0" # 项目版本
description = "Add your description here" # 项目描述(可手动补充)
authors = [
{ name = "lemon", email = "[email protected]" } # 作者信息 (可省略)
]
dependencies = [ # 生产依赖(uv add 添加的包自动写入)
"requests>=2.31.0",
"transformers>=4.41.0",
]
requires-python = ">=3.12" # Python 版本约束(Ubuntu 24.04 默认 3.12)
dev-dependencies = [ # 开发依赖(uv add -d 添加的包自动写入)
"pytest>=7.0.0",
"black>=24.0.0",
]
[tool.uv]
# UV 专属配置(优化 Ubuntu 环境下的使用体验)
virtualenv = { path = ".venv" } # 虚拟环境路径(固定为项目内.venv)
pip-compatibility = true # 兼容 pip 的依赖解析逻辑(避免兼容问题)
如果需要调整依赖版本约束、添加项目元信息,可直接编辑该文件,修改后执行 uv sync 生效:
# 示例:添加 LLM 相关依赖
[project]
dependencies = [
"requests>=2.31.0",
"transformers>=4.41.0",
"torch>=2.0.0",
"accelerate>=0.30.0",
"peft>=0.10.0",
]
uv init、uv add、uv lock 会自动生成/更新;pyproject.toml 后,执行 uv lock 更新锁文件;uv lock --force(忽略缓存,重新解析所有依赖,解决锁文件冲突);uv.lock 提交到 Git 仓库,避免环境不一致。如需将 UV 管理的依赖导出为 requirements.txt(如适配旧部署流程),执行以下命令:
# 导出生产依赖到 requirements.txt(含版本范围)
uv export > requirements.txt
# 导出开发依赖到 requirements-dev.txt
uv export --dev > requirements-dev.txt
# 导出锁文件中的精确版本(无版本范围,保证完全一致)
uv export --locked > requirements-locked.txt
# 导出时排除指定依赖(如无需导出 torch)
uv export --exclude torch > requirements-no-torch.txt
UV 的缓存默认存储在 ~/.cache/uv,包含下载的依赖包、编译后的 C 扩展(如 torch 的 CUDA 扩展),是磁盘占用的主要来源,核心操作如下:
uv cache info
# 示例输出:
# Cache directory: /home/lemon/.cache/uv
# Total size: 3.2 GB
# - Downloads: 2.5 GB (原始依赖包下载缓存)
# - Artifacts: 0.6 GB (编译后的扩展,如 CUDA 相关)
# - Virtualenvs: 0.1 GB (虚拟环境缓存)
# 清理全部缓存(最常用,安全无副作用)
uv cache clean
# 清理后提示:Deleted 3.2 GB of cache
# 仅清理未使用的依赖缓存(保留当前项目用到的,避免重复下载)
uv cache prune
# 仅清理指定包的缓存(如清理 transformers 的旧版本缓存)
uv cache clean transformers
# 仅清理编译后的扩展缓存(如 CUDA 版本切换后)
uv cache clean --artifacts
# 清理缓存并强制刷新索引
uv cache clean --index
# 安装依赖时不使用缓存(强制重新下载)
uv add requests --no-cache
# 同步依赖时不使用缓存
uv sync --no-cache
pyproject.toml、uv.lock(保证所有人环境一致);uv sync 自动同步依赖;uv add <pkg>,提交 pyproject.toml 和 uv.lock;uv lock --force 重新生成锁文件。必须忽略的文件:添加到 .gitignore,避免提交冗余文件:
# 在项目根目录创建 .gitignore
cat > .gitignore <<EOF
# UV 相关
.venv/
uv.lock.bak
# 缓存和临时文件
__pycache__/
*.pyc
*.pyo
# 环境变量文件
.env
.env.local
# 大文件
*.pth
*.bin
models/
EOF
.venv 虚拟环境;Ctrl+Shift+P,输入'Python: Select Interpreter';./.venv/bin/python(项目内的虚拟环境);File → Settings → Project: 项目名 → Python Interpreter;Add → Virtualenv Environment;Existing environment,浏览到项目内的 .venv/bin/python → OK。# 1. 在线环境预下载依赖到缓存
uv cache add -r requirements.txt
# 2. 拷贝缓存目录到离线 Ubuntu 机器(如通过 U 盘)
cp -r ~/.cache/uv /media/lemon/U 盘中的缓存目录
# 3. 离线机器设置缓存目录并安装依赖
export UV_CACHE_DIR="/media/lemon/U 盘中的缓存目录"
uv sync --offline
# 1. 服务器安装 UV(同本地安装命令)
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc
# 2. 拉取项目代码
git clone https://github.com/your-username/auto-grading-agent.git
cd auto-grading-agent
# 3. 同步生产依赖(忽略开发依赖)
uv sync --no-dev
# 4. 运行项目(后台运行,适合长期部署)
nohup uv run main.py > app.log 2>&1 &
| 错误现象 | 原因分析 | 解决方案 |
|---|---|---|
uv: command not found | 环境变量未生效或安装失败 | 1. 重启终端;2. 手动添加环境变量:echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc;3. 重新执行安装脚本 |
| 依赖安装失败(网络超时) | 国外 PyPI 镜像访问缓慢 | 配置国内镜像:uv config set registry https://pypi.tuna.tsinghua.edu.cn/simple |
| 虚拟环境激活失败(权限不足) | .venv/bin/activate 无执行权限 | 赋予权限:chmod +x .venv/bin/activate,再重新激活 |
| 依赖解析冲突(Version solving failed) | 依赖版本约束冲突(如 A 需 B>=2.0,C 需 B<=1.0) | 1. 放宽 pyproject.toml 中的版本约束;2. 执行 uv lock --force 强制解析;3. 更换依赖版本 |
| 编译依赖失败(如 torch、numpy) | 缺少系统编译依赖 | 安装编译工具:sudo apt install build-essential python3-dev libopenblas-dev |
uv run 提示'无权限访问文件' | 目标文件/目录权限不足 | 赋予权限:chmod -R 755 目标目录(如 chmod -R 755 ./data) |
# 运行命令时输出详细日志(如安装依赖失败)
uv add transformers --verbose
# 查看 UV 的日志文件(Ubuntu 下的日志路径)
cat ~/.cache/uv/logs/uv.log
# 导出日志到文件(方便调试)
uv add torch --verbose 2>&1 > uv-install-log.txt
配置国内 PyPI 镜像(清华源),解决国外镜像访问慢的问题:
# 永久设置清华源(全局生效)
uv config set registry https://pypi.tuna.tsinghua.edu.cn/simple
# 验证配置是否生效
uv config get registry
# 输出:https://pypi.tuna.tsinghua.edu.cn/simple
# 并行安装依赖(指定 8 个并发任务,Ubuntu 24.04 支持多线程)
uv add numpy pandas transformers --jobs 8
# 编译依赖时启用优化(针对 CPU 架构优化,提升运行速度)
export UV_BUILD_FLAGS="-O3 -march=native"
uv add numpy
# 编译时应用优化 flags
# 设置缓存最大大小(如限制为 10GB)
uv config set cache.max-size "10GB"
# 自动清理 7 天前的未使用缓存(定期执行)
echo 'uv cache prune --older-than 7d' >> ~/.bashrc
# 每次终端启动时执行
| 功能 | UV | pip + venv | Pipenv | Poetry |
|---|---|---|---|---|
| 依赖解析速度 | 极快(毫秒级) | 慢(秒/分钟级) | 中等 | 中等 |
| 虚拟环境集成 | 内置(自动创建) | 需手动创建(python -m venv) | 内置 | 内置 |
| 锁文件 | 自动生成(uv.lock) | 无 | 自动生成(Pipfile.lock) | 自动生成(poetry.lock) |
| 缓存管理 | 精细化命令(clean/prune) | 基础(pip cache) | 无 | 基础 |
| 开发依赖区分 | 原生支持(-d) | 需手动维护两份 txt | 原生支持 | 原生支持 |
| Ubuntu 兼容性 | 原生适配 | 兼容但繁琐 | 兼容但易出问题 | 兼容但依赖多 |
| 大模型依赖安装(如 torch) | 自动编译优化 | 需手动指定 wheel | 易失败 | 配置复杂 |
# 1. 进入原 pip 管理的项目目录
cd ~/coding/old-project
# 2. 导出 pip 依赖到 requirements.txt
pip freeze > requirements.txt
# 3. 用 UV 初始化项目(自动创建虚拟环境)
uv init --python 3.12 --add -r requirements.txt
# 4. 验证迁移成功(运行项目)
uv run main.py
| 命令 | 作用 |
|---|---|
uv --version | 查看 UV 版本 |
uv init | 初始化项目 + 虚拟环境 |
uv add <pkg> | 安装生产依赖 |
uv add <pkg> -d | 安装开发依赖 |
uv remove <pkg> | 卸载依赖 |
uv run <script> | 运行 Python 脚本(使用项目环境) |
uv sync | 同步依赖到虚拟环境 |
| 命令 | 作用 |
|---|---|
source .venv/bin/activate | 激活虚拟环境 |
deactivate | 退出虚拟环境 |
uv venv --path | 查看虚拟环境路径 |
uv venv --remove | 删除虚拟环境 |
uv run python --version | 查看虚拟环境 Python 版本 |
| 命令 | 作用 |
|---|---|
uv cache info | 查看缓存信息(大小、路径) |
uv cache clean | 清理全部缓存 |
uv cache prune | 清理未使用的缓存 |
uv cache clean <pkg> | 清理指定包的缓存 |
| 命令 | 作用 |
|---|---|
uv lock | 生成/更新锁文件 |
uv lock --force | 强制重新生成锁文件 |
uv export | 导出依赖到 requirements.txt |
uv config set <key> <value> | 配置 UV 全局参数(如镜像) |
uv sync --no-dev | 仅同步生产依赖(部署用) |
uv sync --upgrade | 更新所有依赖到最新兼容版本 |
pip+venv;uv init(初始化项目)→ uv add(安装依赖)→ uv run(运行代码)→ uv sync(同步环境)→ uv cache clean(清理缓存);pyproject.toml 和 uv.lock,忽略 .venv,确保所有开发者环境一致。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online