UV安装及使用教程
0 简介

- 🚀 一个工具替代
pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等 - ⚡️ 比
pip快 10-100 倍 - 🗂️ 提供全面的项目管理功能,包含通用锁文件
- ❇️ 运行脚本,支持内联依赖元数据
- 🐍 安装和管理Python 版本
- 🛠️ 运行和安装 以 Python 包形式发布的工具
- 🔩 包含 pip 兼容接口,在熟悉 CLI 的同时获得性能提升
- 🏢 支持 Cargo 风格的工作区用于可扩展项目
- 💾 磁盘空间高效,通过全局缓存实现依赖去重
- ⏬ 无需 Rust 或 Python 即可通过
curl或pip安装 - 🖥️ 支持 macOS、Linux 和 Windows
1 安装方法
1.1 WSL Ubuntu24.04
1.1.1 官方安装
# 两者选其一
curl -LsSf https://astral.sh/uv/install.sh | sh
# -L:跟随重定向
# -s:静默执行模式,将不输出错误和进度信息
# —S:指定只输出错误信息,通常与-s一起使用。
# -f:连接失败时不显示报错
# ------------------------------------------------------------------------
wget -qO- https://astral.sh/uv/install.sh | sh
# -q:启用静默模式,不显示输出信息
# O-:数据不会保存到文件中,而是直接输出到终端或管道。
downloading uv 0.11.0 x86_64-unknown-linux-gnu
no checksums to verify
installing to /home/zhou/.local/bin
uv
uvx
everything's installed!
To add $HOME/.local/bin to your PATH, either restart your shell or run:
source $HOME/.local/bin/env (sh, bash, zsh)
source $HOME/.local/bin/env.fish (fish)
上述方法会从Github下载相应的文件进行安装,可能需要翻墙操作。如果没有翻墙,有可能会出现无法下载的情况。
UV安装位置:$HOME/.local/bin。
安装完成后要使UV命令生效,需要将安装位置添加到.bashrc文件中。
# 以下两者选其一
# 在.bashrc文件末尾添加如下语句(注意前面的.)
. "$HOME/.local/bin/env"
# 运行source .bashrc命令即可在终端运行uv命令
source ~/.bashrc
1.1.2 从Github下载安装
https://github.com/astral-sh/uv


获取下载地址之后,可以通过Github加速网站下载。
# 虾壳
https://xiake.pro/
# GitHub加速下载
https://iixingchen.github.io/
以uv-x86_64-unknown-linux-gnu.tar.gz为例,通过上述网站获取加速地址。
# Github原始地址:
https://releases.astral.sh/github/uv/releases/download/0.11.0/uv-x86_64-unknown-linux-gnu.tar.gz
# Github加速地址:
https://gitproxy.click/https://releases.astral.sh/github/uv/releases/download/0.11.0/uv-x86_64-unknown-linux-gnu.tar.gz
wget https://gitproxy.click/https://releases.astral.sh/github/uv/releases/download/0.11.0/uv-x86_64-unknown-linux-gnu.tar.gz
curl -O https://gitproxy.click/https://releases.astral.sh/github/uv/releases/download/0.11.0/uv-x86_64-unknown-linux-gnu.tar.gz
将下载的文件解压并复制到/home/zhou/.local/bin($HOME/.local/bin)目录下,如果没有该目录,手动创建目录后将其复制过去
然后添加以下语句到.bashrc文件。
# 两者选其一
# 在.bashrc文件末尾添加如下语句(注意前面的.),添加完成后重启终端或运行source .bashrc命令即可在终端运行uv命令
. "$HOME/.local/bin/env"
# 在命令行中运行如下命令(建议),执行完成后重启终端或运行source .bashrc命令即可在终端运行uv命令
source $HOME/.local/bin/env
1.2 Windows安装方法
1.2.1 官方安装
# powershell 终端命令
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Downloading uv 0.11.0 (x86_64-pc-windows-msvc)
Installing to C:\Users\ZHOU\.local\bin
uv.exe
uvx.exe
uvw.exe
everything's installed!
To add C:\Users\ZHOU\.local\bin to your PATH, either restart your shell or run:
set Path=C:\Users\ZHOU\.local\bin;%Path% (cmd)
$env:Path = "C:\Users\ZHOU\.local\bin;$env:Path" (powershell)
1.1.2 从Github下载安装
https://github.com/astral-sh/uv

获取下载地址之后,可以通过Github加速网站下载,如果下方地址失效,请自行查询网络更新。
# 虾壳
https://xiake.pro/
# GitHub加速下载
https://iixingchen.github.io/
# Github Proxy
https://github.akams.cn/
# GitHub加速
https://gh-proxy.com/
以uv-x86_64-pc-windows-msvc.zip为例,通过上述网站获取加速地址。
# Github原始地址:
https://releases.astral.sh/github/uv/releases/download/0.11.0/uv-x86_64-pc-windows-msvc.zip
# Github加速地址:加速地址可能会有变化,建议登录上述网址自己生成相应的加速下载地址
https://gitproxy.click/https://releases.astral.sh/github/uv/releases/download/0.11.0/uv-x86_64-pc-windows-msvc.zip
wget https://gitproxy.click/https://releases.astral.sh/github/uv/releases/download/0.11.0/uv-x86_64-pc-windows-msvc.zip
curl -O https://gitproxy.click/https://releases.astral.sh/github/uv/releases/download/0.11.0/uv-x86_64-pc-windows-msvc.zip
将下载的文件解压并复制到C:\Users\ZHOU\.local\bin目录下,如果没有该目录,手动创建目录后将其复制过去
然后运行如下语句添加到用户变量。
# 在命令行中运行如下命令(建议),执行完成后重启终端运行uv命令
set Path=C:\Users\ZHOU\.local\bin;%Path% # cmd终端中运行,二者选其一
$env:Path = "C:\Users\ZHOU\.local\bin;$env:Path" # powershell终端中运行,二者选其一
1.3 验证安装
# 两者选其一
uv --version
uv -V
1.4 uv升级
uv self update
info: Checking for updates...
success: You're on the latest version of uv (v0.9.9)
2 Shell自动补全
2.1 为 uv 命令启用 shell 自动补全
# Bash
echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc
# Powershell/pwsh
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
Add-Content -Path $PROFILE -Value '(& uv generate-shell-completion powershell) | Out-String | Invoke-Expression'
完成后请重启 shell 或重新加载 shell 配置文件。
2.2 为 uvx 命令启用 shell 自动补全
# Bash
echo 'eval "$(uvx --generate-shell-completion bash)"' >> ~/.bashrc
# Powershell/pwsh
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
Add-Content -Path $PROFILE -Value '(& uvx --generate-shell-completion powershell) | Out-String | Invoke-Expression'
完成后请重启 shell 或重新加载 shell 配置文件。
3 配置PyPI仓库为国内源
在 ~/.config/uv/uv.toml(用户级别,建议) 或者 /etc/uv/uv.toml(系统级别) 加入以下语句,两者选择其中一个添加即可。
[[index]]
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/"
default = true
4 卸载
4.1 WSL Ubuntu24.04
4.1.1 清理缓存数据、删除缓存文件夹
缓存文件及相关文件安装位置
# 缓存目录
uv cache dir
/home/zhou/.cache/uv
# python安装位置
uv python dir
/home/zhou/.local/share/uv/python
# uv tool安装位置
uv tool dir
/home/zhou/.local/share/uv/tools
# 清理缓存
uv cache clean
# 删除缓存文件夹、python和tool文件夹
sudo rm -r "$(uv cache dir)"
sudo rm -r "$(uv python dir)"
sudo rm -r "$(uv tool dir)"
4.1.2 删除uv、uvx二进制文件
# 删除uv、uvx二进制文件
# 两种写法,任选其一即可
sudo rm -rf $HOME/.local/bin/uv
sudo rm -rf $HOME/.local/bin/uvx
# --------------------------------
sudo rm -rf ~/.local/bin/uv
sudo rm -rf ~/.local/bin/uvx
4.1.3 删除uv文件夹
# 这一步直接删除整个文件夹
# 两种写法,任选其一即可
sudo rm -rf $HOME/.local
sudo rm -rf $HOME/.cache
# --------------------------------
sudo rm -rf ~/.local
sudo rm -rf ~/.cache
4.2 Windows
4.2.1 清理缓存数据、删除缓存文件夹
缓存文件及相关文件安装位置
# 缓存目录
uv cache dir
C:\Users\ZHOU\AppData\Local\uv\cache
# python安装位置
uv python dir
C:\Users\ZHOU\AppData\Roaming\uv\python
# uv tool安装位置
uv tool dir
C:\Users\ZHOU\AppData\Roaming\uv\tools
# 清理缓存
uv cache clean
# 删除缓存文件夹、python和tool文件夹
sudo rm -r "$(uv cache dir)"
sudo rm -r "$(uv python dir)"
sudo rm -r "$(uv tool dir)"
4.2.2 删除uv、uvx二进制文件
# 删除uv、uvx二进制文件(powershell)
rm $HOME\.local\bin\uv.exe
rm $HOME\.local\bin\uvx.exe
rm C:\Users\ZHOU\.local\bin\uv.exe
rm C:\Users\ZHOU\.local\bin\uvx.exe
4.2.3 删除uv文件夹和缓存文件夹
# 这一步直接删除整个文件夹(powershell)
rm $HOME\.local
rm $HOME\Appdata\Roaming\uv
rm $HOME\AppData\Local\uv
rm C:\Users\ZHOU\.local
rm C:\Users\ZHOU\Appdata\Roaming\uv
rm C:\Users\ZHOU\AppData\Local\uv
5 UV使用教程
5.1 Python版本管理(安装和管理Python解释器)
| 命令 | 说明 |
|---|---|
uv python list | 查看可用和已安装的Python 版本 |
uv python install | 安装 Python 版本 |
uv python find | 查找已安装的 Python信息 |
uv python pin | 将当前项目固定使用特定 Python 版本 |
uv python uninstall | 卸载 Python 版本 |
uv python install --reinstall | 重新安装Python,适用于Python版本的更新 |
(1)查看可用和已安装的Python 版本
uv python list
cpython-3.15.0a1-linux-x86_64-gnu <download available>
cpython-3.15.0a1+freethreaded-linux-x86_64-gnu <download available>
cpython-3.14.0-linux-x86_64-gnu <download available>
cpython-3.14.0+freethreaded-linux-x86_64-gnu <download available>
cpython-3.13.9-linux-x86_64-gnu <download available>
cpython-3.13.9+freethreaded-linux-x86_64-gnu <download available>
cpython-3.12.12-linux-x86_64-gnu <download available>
cpython-3.12.3-linux-x86_64-gnu /usr/bin/python3.12
cpython-3.12.3-linux-x86_64-gnu /usr/bin/python3 -> python3.12
cpython-3.11.14-linux-x86_64-gnu <download available>
cpython-3.10.19-linux-x86_64-gnu <download available>
cpython-3.9.25-linux-x86_64-gnu <download available>
cpython-3.8.20-linux-x86_64-gnu <download available>
pypy-3.11.13-linux-x86_64-gnu <download available>
pypy-3.10.16-linux-x86_64-gnu <download available>
pypy-3.9.19-linux-x86_64-gnu <download available>
pypy-3.8.16-linux-x86_64-gnu <download available>
graalpy-3.12.0-linux-x86_64-gnu <download available>
graalpy-3.11.0-linux-x86_64-gnu <download available>
graalpy-3.10.0-linux-x86_64-gnu <download available>
graalpy-3.8.5-linux-x86_64-gnu <download available>
(2)查找已安装的 Python 版本
uv python find
/usr/bin/python3
(3)安装最新版本Python
uv python install
# 使用此命令会从Github上下载python安装文件,有可能会出现网络无法连接导致下载失败的问题,如果出现以下错误,可以使用下面的命令添加github镜像的方式解决下载的问题
error: Failed to install cpython-3.14.0-linux-x86_64-gnu
Caused by: Request failed after 3 retries
Caused by: Failed to download https://github.com/astral-sh/python-build-standalone/releases/download/20251031/cpython-3.14.0%2B20251031-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
Caused by: error sending request for url (https://github.com/astral-sh/python-build-standalone/releases/download/20251031/cpython-3.14.0%2B20251031-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz)
Caused by: client error (Connect)
Caused by: invalid peer certificate: UnknownIssuer
# Github加速下载
uv python install --mirror https://gh.llkk.cc/https://github.com/astral-sh/python-build-standalone/releases/download
Installed Python 3.14.0 in 6.23s
+ cpython-3.14.0-linux-x86_64-gnu (python3.14)
# Github镜像加速地址,如果下方地址失效,请自行查询网络更新
# 虾壳
https://xiake.pro/
# GitHub加速下载
https://iixingchen.github.io/
# Github Proxy
https://github.akams.cn/
# GitHub加速
https://gh-proxy.com/
(4)安装指定版本Python
uv python install 3.13 --mirror https://gh.llkk.cc/https://github.com/astral-sh/python-build-standalone/releases/download
Installed Python 3.13.9 in 5.24s
+ cpython-3.13.9-linux-x86_64-gnu (python3.13)

(5)安装多个版本Python
uv python install 3.11 3.12 --mirror https://gh.llkk.cc/https://github.com/astral-sh/python-build-standalone/releases/download
Installed 2 versions in 6.59s
+ cpython-3.11.14-linux-x86_64-gnu (python3.11)
+ cpython-3.12.12-linux-x86_64-gnu (python3.12)
(6)安装其它实现的Python
# Pypy版本的Python已经设置Pypi仓库的国内源,因此不需要再添加Github的国内镜像加速
uv python install pypy@3.11
Installed Python 3.11.13 in 7.35s
+ pypy-3.11.13-linux-x86_64-gnu
uv python install graalpy@3.12 --mirror https://gh.llkk.cc/https://github.com/astral-sh/python-build-standalone/releases/download
Installed Python 3.12.0 in 18.59s
+ graalpy-3.12.0-linux-x86_64-gnu

(7)查看已安装的Python版本
uv python find
/home/zhou/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/bin/python3.14
uv python find 3.12
/home/zhou/.local/share/uv/python/cpython-3.12.12-linux-x86_64-gnu/bin/python3.12
(8)将当前项目固定使用特定 Python 版本
在具体的某个项目中,进入项目目录后使用如下命令指定选用的python版本
uv python pin 3.14
Pinned `.python-version` to `3.14`
此命令会在指定目录下创建一个.python-version文件,记录Python版本号,此处选用的python版本只和uv管理的虚拟环境有关系,和全局的python、python3命令都没有关系。
3.14
以后如果不在需要这个文件,直接删除.python-version文件即可。
(9)卸载指定的Python版本
uv pyhon list
cpython-3.15.0a1-linux-x86_64-gnu <download available>
cpython-3.15.0a1+freethreaded-linux-x86_64-gnu <download available>
cpython-3.14.0-linux-x86_64-gnu .local/bin/python3.14 -> .local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/bin/python3.14
cpython-3.14.0-linux-x86_64-gnu .local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/bin/python3.14
cpython-3.14.0+freethreaded-linux-x86_64-gnu <download available>
cpython-3.13.9-linux-x86_64-gnu .local/bin/python3.13 -> .local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/bin/python3.13
cpython-3.13.9-linux-x86_64-gnu .local/share/uv/python/cpython-3.13.9-linux-x86_64-gnu/bin/python3.13
cpython-3.13.9+freethreaded-linux-x86_64-gnu <download available>
cpython-3.12.12-linux-x86_64-gnu .local/bin/python3.12 -> .local/share/uv/python/cpython-3.12.12-linux-x86_64-gnu/bin/python3.12
cpython-3.12.12-linux-x86_64-gnu .local/share/uv/python/cpython-3.12.12-linux-x86_64-gnu/bin/python3.12
cpython-3.12.3-linux-x86_64-gnu /usr/bin/python3.12
cpython-3.12.3-linux-x86_64-gnu /usr/bin/python3 -> python3.12
cpython-3.11.14-linux-x86_64-gnu .local/bin/python3.11 -> .local/share/uv/python/cpython-3.11.14-linux-x86_64-gnu/bin/python3.11
cpython-3.11.14-linux-x86_64-gnu .local/share/uv/python/cpython-3.11.14-linux-x86_64-gnu/bin/python3.11
cpython-3.10.19-linux-x86_64-gnu <download available>
cpython-3.9.25-linux-x86_64-gnu <download available>
cpython-3.8.20-linux-x86_64-gnu <download available>
pypy-3.11.13-linux-x86_64-gnu .local/share/uv/python/pypy-3.11.13-linux-x86_64-gnu/bin/pypy3.11
pypy-3.10.16-linux-x86_64-gnu <download available>
pypy-3.9.19-linux-x86_64-gnu <download available>
pypy-3.8.16-linux-x86_64-gnu <download available>
graalpy-3.12.8-linux-x86_64-gnu .local/share/uv/python/graalpy-3.12.0-linux-x86_64-gnu/bin/graalpy
graalpy-3.11.0-linux-x86_64-gnu <download available>
graalpy-3.10.0-linux-x86_64-gnu <download available>
graalpy-3.8.5-linux-x86_64-gnu <download available>
uv python uninstall 3.12
Searching for Python versions matching: Python 3.12
Uninstalled 2 versions in 3.62s
- graalpy-3.12.0-linux-x86_64-gnu
- cpython-3.12.12-linux-x86_64-gnu (python3.12)
uv python uninstall 3.13 3.14
Searching for Python versions matching: Python 3.13
Searching for Python versions matching: Python 3.14
Uninstalled 2 versions in 3.29s
- cpython-3.13.9-linux-x86_64-gnu (python3.13)
- cpython-3.14.0-linux-x86_64-gnu (python3.14)
(10)重新安装Python
uv python install --reinstall --mirror https://gh.llkk.cc/https://github.com/astral-sh/python-build-standalone/releases/download
Installed 2 versions in 7.51s
~ cpython-3.13.9-linux-x86_64-gnu (python3.13)
~ cpython-3.14.0-linux-x86_64-gnu (python3.14)

5.2 项目管理(创建和开发带有 pyproject.toml的Python 项目)
| 命令 | 说明 |
|---|---|
uv init | 创建新 Python 项目并初始化该项目 |
uv add | 为项目添加依赖,安装软件包并将依赖声明写入pyproject.toml文件 |
uv remove | 从项目移除依赖,移除软件包并将依赖从文件pyproject.toml中移除 |
uv sync | 同步项目依赖到环境 |
uv lock | 为项目依赖创建锁文件 |
uv run | 在项目环境中运行命令 |
uv export | 将项目的锁文件导出为其他格式 |
uv tree | 查看项目依赖树 |
uv build | 构建项目为分发包 |
uv publish | 发布项目到包索引 |
(1)创建新Python项目
# 方法一:从终端中导航到要创建项目的目录位置,运行如下命令创建新的项目文件夹并在此文件夹下添加Python项目
pwd
/home/zhou/code
# uv init不指定使用的Python版本,默认使用已安装的最新版本,且使用的Python版本信息存储在.python-version文件中
uv init test1
Initialized project `test` at `/home/zhou/code/test1`
# 方法二:首先从终端导航到要创建项目的目录位置,手动先创建项目文件夹,cd进入创建的项目文件夹,运行命令创建新的Python项目
pwd
/home/zhou/code
mkdir test2
cd test2
# uv init不指定使用的Python版本,默认使用已安装的最新版本,且使用的Python版本信息存储在.python-version文件中
uv init
Initialized project `test2`
创建的文件结构如下:
tree
.
├── README.md
├── main.py
└── pyproject.toml
1 directory, 3 files
main.py 文件包含一个简单的 “Hello world” 程序。
# 项目初始化时指定需要使用的Python版本,且使用的Python版本信息存储在.python-version文件中
uv init test --python 3.13
Initialized project `test` at `/home/zhou/code/test`
cat .python-version
3.13
(2)创建虚拟环境
.venv 文件夹包含项目的虚拟环境,是与系统其他部分隔离的 Python 环境。uv 将在此处安装项目的依赖项。
# 如果不指定虚拟环境的Python版本,默认会使用最新的已安装版本
uv venv
Using CPython 3.14.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
# 创建指定Python版本的虚拟环境
uv venv --python 3.13
Using CPython 3.13.9
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
# 激活虚拟环境
source .venv/bin/activate
(test) zhou@ZHOU-PC:~/code/test$
# 取消激活的虚拟环境
deactivate
zhou@ZHOU-PC:~/code/test$
注意事项:如果项目虚拟化时.python-version文件中指定的Python版本与创建虚拟环境时指定的Python版本不一致,会出现提示。建议的操作步骤,首先更改
.python-version文件中Python版本,通过uv sync命令删除旧虚拟环境并重新创建新的虚拟环境。
uv sync
Using CPython 3.14.0
Removed virtual environment at: .venv
Creating virtual environment at: .venv
Resolved 1 package in 2ms
Audited in 0.00ms
(3)为项目添加依赖
uv add pandas
Using CPython 3.14.0
Creating virtual environment at: .venv
Resolved 7 packages in 1.19s
Prepared 6 packages in 2.88s
Installed 6 packages in 36ms
+ numpy==2.3.4
+ pandas==2.3.3
+ python-dateutil==2.9.0.post0
+ pytz==2025.2
+ six==1.17.0
+ tzdata==2025.2

此命令会首先寻找.venv虚拟环境,如果没有先创建.venv虚拟环境,然后在pyproject.toml文件中添加依赖项记录。
cat pyproject.toml
[project]
name = "test"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.14"
dependencies = [
"pandas>=2.3.3",
]
(4)从项目移除依赖
uv remove pandas
Resolved 1 package in 3ms
Uninstalled 6 packages in 33ms
- numpy==2.3.4
- pandas==2.3.3
- python-dateutil==2.9.0.post0
- pytz==2025.2
- six==1.17.0
- tzdata==2025.2
此命令会从pyproject.toml文件中删除依赖项记录。
cat pyproject.toml
[project]
name = "test"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.14"
dependencies = []
(5)将项目的锁文件导出为其他格式
目前支持 requirements.txt 和 pylock.toml(PEP 751)格式。
uv export requirements.txt
从requirements.txt文件恢复所有依赖项
uv add -r requirements.txt [-c constraints.txt]
(5)同步项目依赖到环境
uv sync
Resolved 1 package in 0.88ms
Audited in 0.00ms
(6)为项目依赖创建锁文件
uv.lock 是一个跨平台的锁定文件,其中包含有关项目依赖项的确切信息。与用于指定项目大致要求的 pyproject.toml 不同,锁定文件包含安装在项目环境中的确切解析版本所有信息。此文件应提交到版本控制系统,以便在不同机器上实现一致且可重现的安装。
uv.lock 是一个人类可读的 TOML 文件,但由 uv 管理,不应手动编辑。
uv lock
Resolved 7 packages in 0.91ms
(7)在项目环境中运行命令
# 运行指定的脚本文件
uv run bash scripts/foo.sh
(8)查看项目依赖树
uv tree
Resolved 7 packages in 0.88ms
test v0.1.0
└── pandas v2.3.3
├── numpy v2.3.4
├── python-dateutil v2.9.0.post0
│ └── six v1.17.0
├── pytz v2025.2
└── tzdata v2025.2
(9)构建项目为分发包
uv build 可用于为项目构建源发行版和二进制发行版。默认情况下,uv build 将在当前目录中构建项目,并将构建的工件放置在 dist/ 子目录中。
uv build
Building source distribution...
running egg_info
creating test.egg-info
writing test.egg-info/PKG-INFO
writing dependency_links to test.egg-info/dependency_links.txt
writing requirements to test.egg-info/requires.txt
writing top-level names to test.egg-info/top_level.txt
writing manifest file 'test.egg-info/SOURCES.txt'
reading manifest file 'test.egg-info/SOURCES.txt'
writing manifest file 'test.egg-info/SOURCES.txt'
running sdist
running egg_info
writing test.egg-info/PKG-INFO
writing dependency_links to test.egg-info/dependency_links.txt
writing requirements to test.egg-info/requires.txt
writing top-level names to test.egg-info/top_level.txt
reading manifest file 'test.egg-info/SOURCES.txt'
writing manifest file 'test.egg-info/SOURCES.txt'
running check
creating test-0.1.0
creating test-0.1.0/test.egg-info
copying files to test-0.1.0...
copying README.md -> test-0.1.0
copying main.py -> test-0.1.0
copying pyproject.toml -> test-0.1.0
copying test.egg-info/PKG-INFO -> test-0.1.0/test.egg-info
copying test.egg-info/SOURCES.txt -> test-0.1.0/test.egg-info
copying test.egg-info/dependency_links.txt -> test-0.1.0/test.egg-info
copying test.egg-info/requires.txt -> test-0.1.0/test.egg-info
copying test.egg-info/top_level.txt -> test-0.1.0/test.egg-info
copying test.egg-info/SOURCES.txt -> test-0.1.0/test.egg-info
Writing test-0.1.0/setup.cfg
Creating tar archive
removing 'test-0.1.0' (and everything under it)
Building wheel from source distribution...
running egg_info
writing test.egg-info/PKG-INFO
writing dependency_links to test.egg-info/dependency_links.txt
writing requirements to test.egg-info/requires.txt
writing top-level names to test.egg-info/top_level.txt
reading manifest file 'test.egg-info/SOURCES.txt'
writing manifest file 'test.egg-info/SOURCES.txt'
running bdist_wheel
running build
running build_py
creating build/lib
copying main.py -> build/lib
running egg_info
writing test.egg-info/PKG-INFO
writing dependency_links to test.egg-info/dependency_links.txt
writing requirements to test.egg-info/requires.txt
writing top-level names to test.egg-info/top_level.txt
reading manifest file 'test.egg-info/SOURCES.txt'
writing manifest file 'test.egg-info/SOURCES.txt'
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64/wheel
copying build/lib/main.py -> build/bdist.linux-x86_64/wheel/.
running install_egg_info
Copying test.egg-info to build/bdist.linux-x86_64/wheel/./test-0.1.0-py3.14.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/test-0.1.0.dist-info/WHEEL
creating '/home/zhou/code/test/dist/.tmp-nv0nva7c/test-0.1.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'main.py'
adding 'test-0.1.0.dist-info/METADATA'
adding 'test-0.1.0.dist-info/WHEEL'
adding 'test-0.1.0.dist-info/top_level.txt'
adding 'test-0.1.0.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Successfully built dist/test-0.1.0.tar.gz
Successfully built dist/test-0.1.0-py3-none-any.whl
(10)发布项目到包索引(较少使用)
uv publish
Publishing 2 files to https://upload.pypi.org/legacy/
5.3 脚本运行(执行独立的 Python 脚本)
| 命令 | 说明 |
|---|---|
uv run | 运行脚本 |
uv add --script | 为脚本添加依赖 |
uv remove --script | 从脚本移除依赖 |
Python 脚本是用于独立执行的文件,例如使用 python <script>.py 命令。
(1)运行指定的脚本文件
uv run bash scripts/foo.sh
(2)运行无依赖的python脚本
uv run example.py
(3)运行带有依赖项的脚本
uv run --no-project example.py
(4)创建Python脚本
uv init --script example.py --python 3.12
(5)锁定依赖项
uv lock --script example.py
5.4 使用工具(运行和安装发布到 Python 包索引的工具)
| 命令 | 说明 |
|---|---|
uvx / uv tool run | 在临时环境中运行工具 |
uv tool install | 为用户以全局方式安装工具 |
uv tool uninstall | 卸载已安装工具 |
uv tool list | 列出已安装的工具 |
uv tool upgrade | 更新指定的工具 |
uv tool update-shell | 更新 shell 以包含工具可执行文件 |
(1)在临时环境中运行工具(工具未安装)
# 以下两条命令完全等效,二者选其一即可
uvx pycowsay hello from uv
uv tool run pycowsay hello
-----
< hello >
-----
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
(2)为用户以全局方式安装工具
uv tool install pycowsay
Resolved 1 package in 2ms
Installed 1 package in 23ms
+ pycowsay==0.0.0.2
Installed 1 executable: pycowsay
(3)列出已安装的工具
uv tool list
pycowsay v0.0.0.2
- pycowsay
(4)卸载已安装的工具
uv tool uninstall pycowsay
Uninstalled 1 executable: pycowsay
(5)更新指定的工具
uv tool upgrade pycowsay
Nothing to upgrade
(6)更新 shell 以包含工具可执行文件
uv tool update-shell
Executable directory /home/zhou/.local/bin is already in PATH
5.5 pip接口(手动管理环境和包)
pip接口适用于遗留工作流或高级命令无法提供足够控制的情况
(1)创建虚拟环境(替代 venv 和 virtualenv)
| 命令 | 说明 |
|---|---|
uv venv | 创建新的虚拟环境 |
| ① 创建虚拟环境 |
# 创建.venv虚拟环境,Python使用默认版本(.python-version记录Python版本)
uv venv
Using CPython 3.14.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
# 创建vm虚拟环境,Python使用默认版本(.python-version记录Python版本)
uv venv vm
Using CPython 3.14.0
Creating virtual environment at: vm
Activate with: source vm/bin/activate
# 创建.venv虚拟环境,Python使用指定版本
uv venv --python 3.13
Using CPython 3.13.9
warning: The requested interpreter resolved to Python 3.13.9, which is incompatible with the project's Python requirement: `>=3.14` (from `project.requires-python`)
Creating virtual environment at: .venv
✔ A virtual environment already exists at `.venv`. Do you want to replace it? · yes
Activate with: source .venv/bin/activate
ls -la
total 36
drwxr-xr-x 5 zhou zhou 4096 Nov 14 14:48 .
drwxr-xr-x 3 zhou zhou 4096 Nov 14 14:47 ..
drwxr-xr-x 7 zhou zhou 4096 Nov 14 14:45 .git
-rw-r--r-- 1 zhou zhou 109 Nov 14 14:45 .gitignore
-rw-r--r-- 1 zhou zhou 5 Nov 14 14:45 .python-version
drwxr-xr-x 4 zhou zhou 4096 Nov 14 14:48 .venv
-rw-r--r-- 1 zhou zhou 0 Nov 14 14:45 README.md
-rw-r--r-- 1 zhou zhou 82 Nov 14 14:45 main.py
-rw-r--r-- 1 zhou zhou 150 Nov 14 14:45 pyproject.toml
drwxr-xr-x 4 zhou zhou 4096 Nov 14 14:48 vm
② 激活虚拟环境
# Linux
source .venv/bin/activate
# Windows
.venv\Scripts\activate
③ 停用虚拟环境
deactivate
(2)管理虚拟环境中的包(替代pip 和 pipdeptree)
| 命令 | 说明 |
|---|---|
uv pip install | 将包安装到当前环境 |
uv pip show | 显示已安装包的详细信息 |
uv pip freeze | 列出已安装包及其版本 |
uv pip check | 检查当前环境的包兼容性 |
uv pip list | 列出已安装包 |
uv pip tree | 查看环境的依赖树 |
uv pip uninstall | 卸载包 |
① 安装单个包到当前环境
uv pip install flask
Resolved 7 packages in 1.06s
Prepared 7 packages in 275ms
Installed 7 packages in 6ms
+ blinker==1.9.0
+ click==8.3.0
+ flask==3.1.2
+ itsdangerous==2.2.0
+ jinja2==3.1.6
+ markupsafe==3.0.3
+ werkzeug==3.1.3
② 安装多个包到当前环境
uv pip install flask fastapi
Resolved 18 packages in 3.07s
Prepared 11 packages in 412ms
Installed 18 packages in 44ms
+ annotated-doc==0.0.4
+ annotated-types==0.7.0
+ anyio==4.11.0
+ blinker==1.9.0
+ click==8.3.0
+ fastapi==0.121.2
+ flask==3.1.2
+ idna==3.11
+ itsdangerous==2.2.0
+ jinja2==3.1.6
+ markupsafe==3.0.3
+ pydantic==2.12.4
+ pydantic-core==2.41.5
+ sniffio==1.3.1
+ starlette==0.49.3
+ typing-extensions==4.15.0
+ typing-inspection==0.4.2
+ werkzeug==3.1.**3**
③ 安装指定版本的包到当前环境
uv pip install django==5.1
Resolved 3 packages in 1.49s
Prepared 3 packages in 1.41s
Installed 3 packages in 329ms
+ asgiref==3.10.0
+ django==5.1
+ sqlparse==0.5.3
uv pip install django>=5.2.2
Resolved 3 packages in 1.22s
Prepared 1 package in 1.27s
Installed 3 packages in 288ms
+ asgiref==3.10.0
+ django==5.2.8
+ sqlparse==0.5.3
④ 显示已安装的包信息(指定单个或多个包名称)
uv pip show flask
Name: flask
Version: 3.1.2
Location: /home/zhou/code/test/.venv/lib/python3.14/site-packages
Requires: blinker, click, itsdangerous, jinja2, markupsafe, werkzeug
Required-by:
uv pip show django fastapi
Name: django
Version: 5.2.8
Location: /home/zhou/code/test/.venv/lib/python3.14/site-packages
Requires: asgiref, sqlparse
Required-by:
---
Name: fastapi
Version: 0.121.2
Location: /home/zhou/code/test/.venv/lib/python3.14/site-packages
Requires: annotated-doc, pydantic, starlette, typing-extensions
Required-by:
⑤ 列出已安装包及其版本
uv pip freeze
annotated-doc==0.0.4
annotated-types==0.7.0
anyio==4.11.0
asgiref==3.10.0
blinker==1.9.0
click==8.3.0
django==5.2.8
fastapi==0.121.2
flask==3.1.2
idna==3.11
itsdangerous==2.2.0
jinja2==3.1.6
markupsafe==3.0.3
pandas==2.3.3
pydantic==2.12.4
pydantic-core==2.41.5
sniffio==1.3.1
sqlparse==0.5.3
starlette==0.49.3
typing-extensions==4.15.0
typing-inspection==0.4.2
werkzeug==3.1.3
⑥ 检查当前环境的包兼容性
uv pip check
Checked 22 packages in 0.78ms
Found 4 incompatibilities
The package `pandas` requires `numpy>=1.26.0 ; python_full_version >= '3.12'`, but it's not installed
The package `pandas` requires `python-dateutil>=2.8.2`, but it's not installed
The package `pandas` requires `pytz>=2020.1`, but it's not installed
The package `pandas` requires `tzdata>=2022.7`, but it's not installed
⑦ 列出已安装包
uv pip list
Package Version
----------------- -------
annotated-doc 0.0.4
annotated-types 0.7.0
anyio 4.11.0
asgiref 3.10.0
blinker 1.9.0
click 8.3.0
django 5.2.8
fastapi 0.121.2
flask 3.1.2
idna 3.11
itsdangerous 2.2.0
jinja2 3.1.6
markupsafe 3.0.3
pandas 2.3.3
pydantic 2.12.4
pydantic-core 2.41.5
sniffio 1.3.1
sqlparse 0.5.3
starlette 0.49.3
typing-extensions 4.15.0
typing-inspection 0.4.2
werkzeug 3.1.3
⑧ 查看环境的依赖树
uv pip tree
django v5.2.8
├── asgiref v3.10.0
└── sqlparse v0.5.3
fastapi v0.121.2
├── annotated-doc v0.0.4
├── pydantic v2.12.4
│ ├── annotated-types v0.7.0
│ ├── pydantic-core v2.41.5
│ │ └── typing-extensions v4.15.0
│ ├── typing-extensions v4.15.0
│ └── typing-inspection v0.4.2
│ └── typing-extensions v4.15.0
├── starlette v0.49.3
│ └── anyio v4.11.0
│ ├── idna v3.11
│ └── sniffio v1.3.1
└── typing-extensions v4.15.0
flask v3.1.2
├── blinker v1.9.0
├── click v8.3.0
├── itsdangerous v2.2.0
├── jinja2 v3.1.6
│ └── markupsafe v3.0.3
├── markupsafe v3.0.3
└── werkzeug v3.1.3
└── markupsafe v3.0.3
pandas v2.3.3
⑨ 卸载包
v pip uninstall django
Uninstalled 1 package in 97ms
- django==5.2.8
uv pip uninstall flask fastapi
Uninstalled 2 packages in 2ms
- fastapi==0.121.2
- flask==3.1.2
(3)锁定虚拟环境中的包(替代pip-tools)
| 命令 | 说明 |
|---|---|
uv pip compile | 将需求编译为锁定文件 |
uv pip sync | 根据锁定文件同步环境 |
① 锁定 pyproject.toml 中声明的依赖项,该命令会生成requirements.txt文件 |
uv pip compile pyproject.toml -o requirements.txt
Resolved 6 packages in 1.16s
# This file was autogenerated by uv via the following command:
# uv pip compile pyproject.toml -o requirements.txt
numpy==2.3.4
# via pandas
pandas==2.3.3
# via test (pyproject.toml)
python-dateutil==2.9.0.post0
# via pandas
pytz==2025.2
# via pandas
six==1.17.0
# via python-dateutil
tzdata==2025.2
# via pandas
② 根据锁定文件同步环境
# 此命令会根据requirements.txt中记录的软件程序更新虚拟环境,在requirements.txt中记录的包会被安装,不在requirements.txt中记录的包会被删除
# 除了requirements.txt文件外,也可以使用pyproject.toml文件
uv pip sync requirements.txt
Resolved 6 packages in 4ms
Uninstalled 8 packages in 11ms
- contourpy==1.3.3
- cycler==0.12.1
- fonttools==4.60.1
- kiwisolver==1.4.9
- matplotlib==3.10.7
- packaging==25.0
- pillow==12.0.0
- pyparsing==3.2.5
# -----------------------------------
uv pip sync pyproject.toml
Resolved 1 package in 3ms
Uninstalled 13 packages in 30ms
- contourpy==1.3.3
- cycler==0.12.1
- fonttools==4.60.1
- kiwisolver==1.4.9
- matplotlib==3.10.7
- numpy==2.3.4
- packaging==25.0
- pillow==12.0.0
- pyparsing==3.2.5
- python-dateutil==2.9.0.post0
- pytz==2025.2
- six==1.17.0
- tzdata==2025.2
5.6 实用工具(管理和检查 uv 的状态)
管理和检查 uv 的状态,例如缓存、存储目录或执行自我更新。
| 命令 | 说明 |
|---|---|
uv cache clean | 清除缓存 |
uv cache prune | 清除过期缓存 |
uv cache dir | 显示 uv 缓存目录路径 |
uv tool dir | 显示 uv 工具目录路径 |
uv python dir | 显示 uv 安装的 Python 版本路径 |
uv self update | 将 uv 更新至最新版本 |
(1)显示uv缓存目录路径
uv cache dir
/home/zhou/.cache/uv
zhou@ZHOU-PC:~/.cache/uv$ ls -la
total 44
drwxr-xr-x 9 zhou zhou 4096 Nov 14 15:26 .
drwx------ 3 zhou zhou 4096 Nov 14 11:21 ..
-rw-r--r-- 1 zhou zhou 1 Nov 14 11:21 .gitignore
-rwxrwxrwx 1 zhou zhou 0 Nov 14 11:21 .lock
-rw-r--r-- 1 zhou zhou 43 Nov 14 11:21 CACHEDIR.TAG
drwxr-xr-x 41 zhou zhou 4096 Nov 14 15:26 archive-v0
drwxr-xr-x 2 zhou zhou 4096 Nov 14 11:21 builds-v0
drwxr-xr-x 3 zhou zhou 4096 Nov 14 11:21 environments-v2
drwxr-xr-x 3 zhou zhou 4096 Nov 14 11:21 interpreter-v4
drwxr-xr-x 2 zhou zhou 4096 Nov 14 11:21 sdists-v9
drwxr-xr-x 3 zhou zhou 4096 Nov 14 11:21 simple-v18
drwxr-xr-x 3 zhou zhou 4096 Nov 14 11:21 wheels-v5
(2)显示 uv 安装的 Python 版本路径
uv python dir
/home/zhou/.local/share/uv/python
zhou@ZHOU-PC:~/.local/share/uv/python$ ls -la
total 24
drwxr-xr-x 5 zhou zhou 4096 Nov 14 10:05 .
drwxr-xr-x 4 zhou zhou 4096 Nov 14 11:33 ..
-rw-r--r-- 1 zhou zhou 1 Nov 14 09:19 .gitignore
-rwxrwxrwx 1 zhou zhou 0 Nov 14 09:19 .lock
drwxr-xr-x 9 zhou zhou 4096 Nov 14 10:05 .temp
drwxr-xr-x 6 zhou zhou 4096 Nov 14 10:05 cpython-3.13.9-linux-x86_64-gnu
drwxr-xr-x 6 zhou zhou 4096 Nov 14 10:05 cpython-3.14.0-linux-x86_64-gnu
(3)显示 uv 工具目录路径
uv tool dir
/home/zhou/.local/share/uv/tools
zhou@ZHOU-PC:~/.local/share/uv/tools$ ls -la
total 16
drwxr-xr-x 3 zhou zhou 4096 Nov 14 11:33 .
drwxr-xr-x 4 zhou zhou 4096 Nov 14 11:33 ..
-rw-r--r-- 1 zhou zhou 1 Nov 14 11:33 .gitignore
-rwxrwxrwx 1 zhou zhou 0 Nov 14 11:33 .lock
drwxr-xr-x 5 zhou zhou 4096 Nov 14 11:33 pycowsay
(4)清除缓存
uv cache clean
Clearing cache at: /home/zhou/.cache/uv
Removed 13403 files (248.4MiB)
(5)清除过期缓存
uv cache prune
No cache found at: /home/zhou/.cache/uv
(6)将 uv 更新至最新版本
uv self update
info: Checking for updates...
success: You're on the latest version of uv (v0.9.9)
6 项目结构和文件
一个项目由几个重要部分组成,它们协同工作,使 uv 能够管理你的项目。 除了 uv init 创建的文件外,在你首次运行项目命令(如 uv run、uv sync 或 uv lock)时,uv 还会在项目根目录中创建一个虚拟环境和 uv.lock 文件。
.
├── .venv
│ ├── bin
│ ├── lib
│ └── pyvenv.cfg
├── .python-version
├── README.md
├── main.py
├── pyproject.toml
└── uv.lock
6.1 pyproject.toml
pyproject.toml 包含项目的元数据:
[project]
name = "test"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.14"
dependencies = []
6.2 .python-version
.python-version 文件包含项目的默认 Python 版本。记录uv 在创建项目的虚拟环境时使用的 Python 版本。
3.14
6.3 .venv
.venv 文件夹包含项目的虚拟环境,是与系统其他部分隔离的 Python 环境。uv 将在此处安装项目的依赖项。此处需要的Python版本记录在.python-version 文件中。
.
├── CACHEDIR.TAG
├── bin
│ ├── activate
│ ├── activate.bat
│ ├── activate.csh
│ ├── activate.fish
│ ├── activate.nu
│ ├── activate.ps1
│ ├── activate_this.py
│ ├── deactivate.bat
│ ├── pydoc.bat
│ ├── python -> /home/zhou/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/bin/python3.14
│ ├── python3 -> python
│ └── python3.14 -> python
├── lib
│ └── python3.14
│ └── site-packages
│ ├── __pycache__
│ │ └── _virtualenv.cpython-314.pyc
│ ├── _virtualenv.pth
│ └── _virtualenv.py
├── lib64 -> lib
├── pyvenv.cfg
└── share
└── man
└── man1
10 directories, 17 files
6.4 uv.lock
uv.lock 是一个跨平台的锁定文件,其中包含有关项目依赖项的确切信息。与用于指定项目大致要求的 pyproject.toml 不同,锁定文件包含安装在项目环境中的确切解析版本。此文件应提交到版本控制系统,以便在不同机器上实现一致且可重现的安装。
uv.lock 是一个人类可读的 TOML 文件,但由 uv 管理,不应手动编辑。
uv lock
Resolved 1 package in 0.70ms
version = 1
revision = 3
requires-python = ">=3.14"
[[package]]
name = "test"
version = "0.1.0"
source = { virtual = "." }
7 uv配置文件
uv的配置文件分为项目级别配置文件、用户级别配置文件和系统级别配置文件。当前项目目录下的pyproject.toml为项目级别配置文件,~/.config/uv/uv.toml 为用户级别配置文件,/etc/uv/uv.toml为系统级别配置。
(1)在项目中,uv 将从项目根目录开始搜索,如果找到 pyproject.toml 文件,uv 将从 [tool.uv] 表中读取配置。如果不存在这样的表,pyproject.toml 文件将被忽略,uv 将继续在其它目录层级结构中搜索。
# pyproject.toml
[[tool.uv.index]]
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/"
default = true
(2)uv 还会搜索 uv.toml 文件(用户级别和系统级别配置必须使用 uv.toml 格式),uv 会在 macOS 和 Linux 系统上的 ~/.config/uv/uv.toml(或 $XDG_CONFIG_HOME/uv/uv.toml),或 Windows 系统上的 %APPDATA%\uv\uv.toml 中查找用户级配置;在 macOS 和 Linux 系统上的 /etc/uv/uv.toml(或 $XDG_CONFIG_DIRS/uv/uv.toml),或 Windows 系统上的 %SYSTEMDRIVE%\ProgramData\uv\uv.toml 中查找系统级配置。
# uv.toml
[[index]]
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/"
default = true
(3)如果同一个目录中同时存在 uv.toml 和 pyproject.toml 文件,uv.toml 文件优先于 pyproject.toml 文件,将从 uv.toml 中读取配置,而 pyproject.toml 中的 [tool.uv] 部分将被忽略。
(4)如果同时找到项目级、用户级和系统级配置文件(位于不同的目录中),设置将被合并,项目级配置优先于用户级配置,用户级配置优先于系统级配置。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)