本文适用于 Windows 11 和 CentOS 7。示例以 PowerShell 为主,CentOS 7 的差异在对应小节单独标注。
一、介绍
uv 是用 Rust 编写的 Python 一体化工具,覆盖 Python 版本管理、虚拟环境和包管理。相比传统 pip + venv 组合,它速度更快,并能通过 pyproject.toml 和 uv.lock 保证依赖可复现。
uv 的常用功能可以按使用场景分为三类,分别对应官方文档中的 Projects、Scripts、Tools 板块:
二、安装 uv
在 PowerShell 中执行官方安装脚本:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"安装后重启终端,运行 uv --version 确认。
如果 PowerShell 阻止脚本执行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUserCentOS:使用官方 shell 脚本安装:
curl -LsSf https://astral.sh/uv/install.sh | sh
三、配置国内镜像
UV_INDEX_URL 影响后续所有包下载,包括 uv python install 下载解释器、uv add / uv sync / uvx 拉取依赖。国内网络建议装完 uv 就先配好,避免后面卡在下载上。
PowerShell:
[Environment]::SetEnvironmentVariable("UV_INDEX_URL", "https://pypi.tuna.tsinghua.edu.cn/simple", "User")重启终端后生效。
CentOS 7:在 ~/.bashrc 中追加
export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple",然后 source ~/.bashrc。
四、安装 Python
安装最新稳定版:
uv python install安装指定版本:
uv python install 3.12查看已安装版本:
uv python list找一个已安装版本:
uv python find卸载指定版本:
uv python uninstall 3.12说明:uv python install 会把解释器安装到 uv 的管理目录,并暴露带版本号的可执行文件(如 python3.12)。默认不会覆盖系统的 python / python3 命令。
五、项目(Projects):初始化、依赖与环境
项目模式围绕两个文件展开,先建立这个对照,后面的命令才容易理解:
日常你只需要改 pyproject.toml(或用 uv add)。uv run / uv sync 会自动检查它和 uv.lock 是否一致,必要时更新锁文件,再把依赖同步到 .venv。想升级依赖时用 uv lock --upgrade 显式更新,不要手改 uv.lock。
项目模式要求当前目录(或父目录)存在 pyproject.toml。首次使用先初始化:
# 初始化项目,生成 pyproject.toml、.python-version、.gitignore 等
uv init example
cd example
# 让现有项目接入 uv,建议用 uv init --bare,只引入 pyproject.toml,不动现有的任何代码结构1、锁定 Python 版本
# 生成 .python-version,声明项目使用的 Python 版本
uv python pin 3.12.python-version 应提交到 Git,保证团队和 CI 用同一 Python 版本。它只决定 Python 版本,不创建 pyproject.toml、不安装依赖、不建 .venv。
注意:修改 pin 的版本后,已有的 .venv 不会自动重建以匹配新版本。稳妥做法是删除 .venv 后重新执行 uv run 或 uv sync。
如果不想用 uv python pin,也可以在 pyproject.toml 里用 requires-python 约束版本范围(如 requires-python = "==3.12.*")。区别在于:pin 是项目级显式锁定,优先级更高,与 requires-python 冲突时会报错;没有 pin 时,requires-python 作为回退依据选择解释器。两者选其一即可,不必同时用。
2、添加依赖
# 安装 ruff 到项目 .venv,并写入 pyproject.toml 和 uv.lock
uv add ruffuv add 是项目级命令,装到项目 .venv(项目隔离);而 pip install 装到指定解释器自身(对该解释器全局)。
3、运行命令
# 在项目虚拟环境中运行,无需手动激活
uv run ruff check
uv run python script.pyuv run 会自动找到项目环境并执行命令,不需要手动激活。环境不存在时它会自动创建;依赖有变化时它会先同步再执行。
4、锁定与同步
# 根据 pyproject.toml 重新解析并生成/更新 uv.lock
uv lock
# 根据 uv.lock 同步 .venv(安装缺失依赖、移除多余依赖)
uv sync
# 创建并填充 .venv 是 uv sync(或 uv run)的工作uv lock:只解析依赖、更新锁文件,不安装。
uv sync:让 .venv 与锁文件一致,是 CI 和换机后复现环境的推荐命令。
uv sync --frozen:严格按现有 uv.lock 安装,不更新锁文件,适合 CI/生产环境。
uv lock --upgrade:显式升级依赖并更新锁文件。
三个命令的包含关系:
uv run 默认包含 uv sync 的行为(必要时先同步环境再执行),但不删除环境里多余的包。
uv sync 默认包含 uv lock 的行为(发现 pyproject.toml 与 uv.lock 不一致时自动更新锁文件),然后精确同步 .venv。
uv lock 只更新锁文件,不碰环境。
5、创建环境(通常不需要手动执行)
uv 的项目命令会按需自动管理 .venv,一般不需要手动 uv venv。
手动 uv venv 仅用于:
想在无 pyproject.toml 的目录里快速建一个空隔离环境;
需要非默认名称的环境(如 uv venv myenv),且不想用项目机制。
# 在当前目录创建虚拟环境 .venv(默认约定,主流工具如 VS Code、PyCharm 可自动识别)
uv venv
# 创建名为 myenv 的虚拟环境,适用于临时隔离测试
# 注意:非默认名称 .venv,主流工具可能无法自动识别,需手动指定解释器路径
# uv venv myenv日常推荐直接用 uv run 自动同步,它已经包含环境准备:
# uv run 会自动确保 .venv 存在且与 uv.lock 一致,再执行命令
uv run python script.py只有需要单独同步环境、不执行命令时,才单独用:
# 只同步环境,不运行命令
uv sync六、脚本(Scripts):非项目目录下的单文件脚本
没有 pyproject.toml 时,uv run 不会自动猜测依赖,需要显式指定。
1、无第三方依赖
# 无依赖时直接用可用 Python 运行;有内联依赖声明时自动创建隔离环境
uv run python script.py2、有第三方依赖
# 依赖安装在 uv 全局缓存目录。Windows 位置: %LOCALAPPDATA%\uv\cache
# 可用 uv cache dir 查看,用 uv cache prune 清除
uv run --with requests python script.py3、把依赖写进脚本(PEP 723)
# 在脚本头部插入内联依赖声明,之后直接 uv run script.py 即可
# 依赖位置和 --with 一样。
uv add --script script.py requests这种方式对脚本文件有轻微侵入(文件头多一段注释),但脚本自包含,发给别人可直接 uv run script.py。
七、工具(Tools):运行和安装 CLI 工具
工具模式类似 pipx,用于管理 Python 包提供的命令行工具,与项目和脚本环境隔离。
1、临时运行工具:uvx / uv tool run
uvx pycowsay 'hello world!'uvx 是 uv tool run 的别名,在临时环境中运行工具,不污染全局。输出示例:
"""
------------
< hello world! >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||2、安装工具:uv tool install
uv tool install ruff
ruff --version安装后工具进入 uv 的工具目录并暴露可执行命令,可长期使用;卸载用 uv tool uninstall ruff。
八、卸载 uv
卸载主程序:
Remove-Item -Force "$env:USERPROFILE\.local\bin\uv.exe" -ErrorAction SilentlyContinue
Remove-Item -Force "$env:USERPROFILE\.local\bin\uvx.exe" -ErrorAction SilentlyContinue如果通过 WinGet 安装,先尝试:
winget uninstall --id=astral-sh.uv -e清理数据:
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\uv" -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$env:USERPROFILE\.cache\uv" -ErrorAction SilentlyContinue如果设置过 UV_INDEX_URL 等环境变量,在“系统属性 → 环境变量”中删除。
验证:uv --version 应提示无法识别。