news 2025/12/16 9:44:20

uv包管理工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uv包管理工具

uv包管理工具笔记

1 介绍

uv 是一款用 Rust 编写的高性能 Python 包和项目管理工具,旨在为开发者提供一体化的开发环境管理方案,可替代pippip-toolspipxpoetrypyenvvirtualenv等多个工具。

其核心优势包括:

  • 极致速度:依赖解析和包安装速度比pip快 10-100 倍(基于官方基准测试),得益于 Rust 语言的高效性能。
  • 功能集成:集虚拟环境管理、依赖安装与锁定、Python 版本管理、工具临时运行等功能于一体。
  • 兼容性强:提供与pip兼容的接口(如uv pip install),可无缝迁移现有工作流。
  • 跨平台支持:适配 macOS、Linux、Windows 系统,且支持 Docker 等容器环境。
  • 现代工作流:支持 PEP 标准项目结构、依赖锁文件(uv.lock)、工作区管理等现代开发模式。

2 安装

uv 提供多种安装方式,可根据系统和场景选择:

2.1 独立安装器(推荐)

  • macOS/Linux

    # 安装最新版本curl-LsSf https://astral.sh/uv/install.sh|sh# 安装指定版本(如 0.9.17)curl-LsSf https://astral.sh/uv/0.9.17/install.sh|sh

    若系统无curl,可替换为wget

    wget-qO- https://astral.sh/uv/install.sh|sh
  • Windows(PowerShell)

    # 安装最新版本powershell-ExecutionPolicy ByPass-c"irm https://astral.sh/uv/install.ps1 | iex"# 安装指定版本(如 0.9.17)powershell-ExecutionPolicy ByPass-c"irm https://astral.sh/uv/0.9.17/install.ps1 | iex"

2.2 从 PyPI 安装

适合已安装 Python 环境的场景,建议用pipx隔离:

# 用 pipx 安装(推荐)pipxinstalluv# 用 pip 安装(可能影响全局环境)pipinstalluv

2.3 Docker 环境安装

在 Docker 中集成 uv 可通过两种方式:

# 方式 1:从官方镜像复制二进制文件(推荐,体积小) FROM python:3.12-slim-trixie COPY --from=ghcr.io/astral-sh/uv:0.9.17 /uv /uvx /bin/ # 方式 2:通过安装脚本 FROM python:3.12-slim-trixie RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates ADD https://astral.sh/uv/0.9.17/install.sh /uv-installer.sh RUN sh /uv-installer.sh && rm /uv-installer.sh ENV PATH="/root/.local/bin/:$PATH"

2.4 手动下载安装

以Windows11操作系统为例:
从 GitHub 下载对应平台的压缩包 ,解压后得到 uv.exe、uvw.exe、uvx.exe,将文件路径添加到系统环境变量 PATH 即可。

验证安装

安装完成后,运行以下命令确认:

uv --version# 输出版本信息即表示成功

3 配置镜像源

uv 支持配置国内镜像源以提升下载速度,推荐使用阿里云、豆瓣、中科大等稳定源:

3.1 临时指定索引(单次命令)

通过--index-url参数临时使用镜像源:(以安装flask为例)

# 阿里云镜像uv pipinstallflask --index-url https://mirrors.aliyun.com/pypi/simple/ uvaddflask --index-url https://mirrors.aliyun.com/pypi/simple/# 豆瓣镜像uv pipinstallflask --index-url https://pypi.doubanio.com/simple/ uvaddflask --index-url https://pypi.doubanio.com/simple/# 中科大镜像uv pipinstallflask --index-url https://pypi.mirrors.ustc.edu.cn/simple/ uvaddflask --index-url https://pypi.mirrors.ustc.edu.cn/simple/

3.2 全局配置镜像源

通过环境变量或配置文件设置全局默认镜像:

方式1:环境变量

# macOS/LinuxexportUV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/# Windows PowerShell# 当前终端$env:UV_INDEX_URL="https://mirrors.aliyun.com/pypi/simple/"# 或永久生效[Environment]::SetEnvironmentVariable("UV_INDEX_URL","https://mirrors.aliyun.com/pypi/simple/","User")

方式2:配置文件
在用户配置目录创建 uv.toml 文件:

  • Linux/macOS: ~/.config/uv/uv.toml
  • Windows: %APPDATA%\uv\uv.toml
# uv.toml文件index-url="https://mirrors.aliyun.com/pypi/simple/"

3.3 项目级配置(推荐)

在项目根目录的pyproject.toml中配置,仅对当前项目生效:
[[tool.uv.index]] - 现代多索引配置

# 现代 uv 工作流推荐(影响 uv add/sync/run)# 定义主索引(豆瓣)[[tool.uv.index]]url="https://pypi.doubanio.com/simple/"default=true# 标记为默认主索引# 定义备用索引(阿里云)[[tool.uv.index]]url="https://mirrors.aliyun.com/pypi/simple/"# 定义专用索引# 专用索引1:pytorch-cpu[[tool.uv.index]]name="pytorch-cpu"url="https://download.pytorch.org/whl/cpu/"explicit=true# 只有指定 name 的包才会使用# 专用索引2:私有 GitLab 源[[tool.uv.index]]name="gitlab-private"url="https://gitlab.example.com/api/v4/projects/123/packages/pypi/simple"explicit=true# --- 关键部分:将包映射到对应的索引 ---[tool.uv.sources]# 格式:包名 = [{ index = "索引名" }]# [tool.uv.sources] 中的包名必须匹配 project.dependencies 中的名称torch=[{index="pytorch-cpu"}]private-package=[{index="gitlab-private"}]

配置优先级:项目级配置(pyproject.toml) > 环境变量 > 用户级配置(uv.toml)

3.5 验证配置

查看当前生效的镜像源:
查看当前项目的 pyproject.toml 中是否有 [tool.uv.pip] 配置段,镜像源信息会在此处定义:

# 方法1:查看环境变量echo$UV_INDEX_URL# Linux/macOSecho$env:UV_INDEX_URL# Windows PowerShell# 方法2:查看完整配置(包括所有来源)uv run --show-settings

注意:一般情况下,uv的cache目录会有默认缓存路径:

Linux: $HOME/.cache/uv macOS: /Users/<user>/Library/Caches/uv Windows: %LOCALAPPDATA%\uv\cache(通常是 C:\Users\<用户>\AppData\Local\uv\cache) 如果要修改缓存存放路径,可通过以下方式进行修改————
# Linux/macOS export UV_CACHE_DIR=/path/to/your/cache/dir # Windows(通过系统环境变量设置) # 新建系统变量 UV_CACHE_DIR,值为 D:\uv_cache 等路径

以Windows为例:

验证:uv cache dir

清空缓存

清理未使用的缓存:uv cache prune(删除无用包后释放空间) 彻底清空缓存:uv cache clean(删除整个缓存目录)

还有,更重要的一点是,uv也有默认的存放python解释器的路径,
它会将下载的python解释器默认存放到这个目录中:C:\Users\用户\AppData\Roaming\uv\python

所以,如果你想删除某个项目,或某个虚拟环境,所对应的python解释器是不会被删除的,因为虚拟环境引用的是其快捷方式,这恰恰揭示了 uv 高效缓存机制 的核心设计!

因此,如果你想修改uv默认存放python解释器的路径,可以这么做————

之后,uv所下载安装的python解释器,就会存放在你指定的目录中
可通过 uv python list 验证

4 创建Python项目(基于虚拟环境)

uv 提供简洁的项目初始化与虚拟环境管理流程,步骤如下:

4.1 初始化项目

在空目录中创建项目结构(生成pyproject.toml等文件):

# 方式一: 基本初始化(默认Python版本)uv init my_projectcdmy_project# 方式二: 指定Python版本初始化(如3.12)uv init my_project --python3.12cdmy_project

4.2 创建并激活虚拟环境

# 方式一: 在项目目录中创建虚拟环境(默认路径为 .venv)uv venv# 方式二: 自定义虚拟环境名uv venv 虚拟环境名# 激活环境(以默认虚拟环境名为例)# macOS/Linuxsource.venv/bin/activate# Windows# PowerShell.venv\Scripts\Activate.ps1# CMD 命令提示符.venv\Scripts\activate.bat# Git Bash / WSLsource.venv/Scripts/activate

4.3 添加依赖

# 添加生产依赖(自动更新 pyproject.toml 和 uv.lock)uvaddflask# 最新版本uvadd"requests>=2.31.0"# 指定版本约束uvadd"git+https://github.com/astral-sh/ruff"# 从Git仓库添加# 添加开发依赖(仅开发环境使用)uvadd--dev pytest# 测试工具uvadd--dev black# 代码格式化工具

小细节1:

通常情况下,在初始化项目的命令中,我们推荐采用上述方式二:uv init my_project --python 3.12 然而,虽然方式二指定了python解释器的版本,但是执行该命令后却不会立马进行下载安装该解释器 当执行该命令,uv会做以下两件事: 1. 创建项目结构:生成 pyproject.toml、.python-version 等文件 2. 记录版本要求:在 .python-version 文件中写入 3.12,作为项目的 Python 版本约束 因为,uv 采用惰性下载(lazy downloading)策略,只有当你执行需要实际使用 Python 解释器的命令时,才会检查并下载

小细节2:

有时候,我们会看到另一种写法: uv init my_project 【初始化项目不指定python解释器版本】 cd my_project uv venv --python 3.12 【在创建虚拟环境时指定python解释器版本】 .venv\Scripts\Activate.ps1 那么,pyproject.toml 无版本记录,约束仅生效一次,所以是不大推荐的

因此,我们更倾向于方式二的写法

小细节3:

如果,我们不指定python解释器的版本【uv init命令中不指定,uv venv命令中也不指定】 那么,最终会采用内置的 fallback 版本(如 uv 0.9.17 的Python 版本为3.12)

4.4 将创建好的项目在PyCharm中打开

4.4.1 File – > Open – > 项目名

4.4.2 配置环境变量中的解释器



4.4.3 打开PyCharm终端验证是否已激活对应的虚拟环境

4.5 生成依赖锁文件

基于pyproject.toml生成锁定文件(确保依赖版本一致):

uv lock

手动锁定,生成的uv.lock记录了所有依赖的精确版本,适合团队协作和部署。
一般情况下,uv add命令会自动更新 pyproject.toml 和 uv.lock

4.6 同步环境

根据锁文件安装依赖到虚拟环境(确保环境一致性):
如果锁文件与 pyproject.toml 不一致则报错

uvsync--locked# 严格按照锁文件安装

4.7 运行项目

通过uv run在虚拟环境中运行脚本或命令:

# 运行Python脚本uv run main.py# 运行安装的工具(如pytest)uv run pytest tests/

5 其他常见命令

5.1 包管理(兼容 pip 接口)

安装指定版本:uv pip install “flask==2.3.3”
卸载包:uv pip uninstall flask
冻结依赖(生成 requirements.txt):uv pip freeze > requirements.txt
同步 requirements.txt:uv pip sync requirements.txt
编译依赖(从 .in 文件生成 .txt):uv pip compile requirements.in --output requirements.txt

5.2 项目管理

移除依赖:uv remove flask(从 pyproject.toml 中移除)
查看依赖树:uv tree(展示项目依赖关系)
格式化代码:uv run ruff format .(需先添加 ruff/black 等工具)
构建包:uv build(生成 sdist 和 wheel 包)
发布包:uv publish(上传到 PyPI 或指定索引)

5.3 工具运行(类似 pipx)

临时运行工具(无需安装):uvx black --version(直接运行 black)
安装工具到用户目录:uv tool install ruff(全局可用,不污染项目环境)

5.4 Python 版本管理

安装指定 Python 版本:uv python install 3.11 3.12
锁定当前目录 Python 版本:uv python pin 3.11(生成 .python-version 文件)
查看已安装版本:uv python list

5.5 查看当前项目安装了哪些包

命令适用场景显示内容优点缺点
uv pip list传统 pip 工作流包名和版本简单直接,支持--outdated不显示依赖关系
uv tree现代项目工作流依赖树结构清晰展示依赖关系需 pyproject.toml
uv.lock精确版本核查精确锁定版本和哈希最精确,适合CI/CD可读性较差
uv pip freeze环境导出requirements 格式兼容 pip 生态不显示间接依赖

6 与 pip、conda、pdm 工具的对比

特性uvpipcondapdm
核心定位全功能 Python 包/项目管理器基础 Python 包安装工具跨语言包/环境管理器(支持 Python、C++ 等)现代 Python 项目管理器(PEP 621 支持)
速度极快(Rust 实现,10-100x 于 pip)较慢(Python 实现)中等(依赖解析复杂)较快(Rust 优化部分逻辑)
虚拟环境原生支持(uv venv依赖venvvirtualenv原生支持(环境隔离性强)原生支持(pdm venv
依赖锁定支持(uv.lock,平台无关)需配合pip-tools生成requirements.txt支持(environment.yml支持(pdm.lock
Python 版本管理原生支持(uv python不支持(依赖pyenv等工具)原生支持(conda install python=3.11需配合pyenv等工具
多语言支持仅 Python仅 Python支持(Python、R、C++ 等)仅 Python
兼容性兼容 pip 接口(uv pip标准接口,生态最广部分 Python 包需适配 conda 渠道兼容 pip 包,支持 PEP 标准
适用场景追求速度和一体化管理的 Python 项目简单包安装、脚本依赖多语言项目、科学计算(依赖 C 库)现代 Python 项目(PEP 621 优先)

总结
uv
适合需要高效依赖管理、替代多工具(如同时需要 pip、pipx、pyenv)的 Python 开发者,尤其在大型项目中能显著提升效率;
conda
更适合跨语言或依赖复杂系统库的场景(如科学计算);
pdm
专注于 Python 现代项目规范(如 PEP 621),适合追求标准化的团队;
pip
仍是最基础的包安装工具,适合简单脚本或快速验证场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/12 18:40:02

字符串特性解析:Python不可变性引发的错误

引言 在Python编程中&#xff0c;字符串是最基础也是最常用的数据类型之一。[1]然而&#xff0c;许多开发者对于字符串的不可变性&#xff08;immutability&#xff09;特性理解不足&#xff0c;这导致了各种难以察觉的错误和性能问题。字符串的不可变性看似简单&#xff0c;实…

作者头像 李华
网站建设 2025/12/12 18:39:55

从零开始构建Agentic RAG:结合RAG与AI Agent的大模型新范式实战指南!

简介 本文详细介绍了Agentic RAG这一结合RAG与AI Agent的新范式。首先分别阐述了RAG的检索增强生成原理和AI Agent的感知决策机制&#xff0c;然后通过LangChain和LangGraph框架展示了从文档处理到向量存储&#xff0c;再到智能问答系统的完整实现流程。最后探讨了Agentic RAG…

作者头像 李华
网站建设 2025/12/16 6:41:40

EasyPoi 数据脱敏

结果规则Controller层 CrossOriginGetMapping("/exportStudentsDesensitization")public void exportStudentsDesensitization(HttpServletResponse response) throws IOException {List<Student> studentList studentService.list();List<StudentExportDe…

作者头像 李华
网站建设 2025/12/16 6:41:39

收藏必备!GPT-5.2震撼发布:OpenAI反击战,职场程序员的AI新神器

OpenAI发布GPT-5.2模型回应Google Gemini竞争&#xff0c;推出三版本。GPT-5.2 Thinking在44个职业任务中70.9%超越人类专家&#xff0c;编程能力创测试新高&#xff0c;长文本处理接近100%准确率&#xff0c;幻觉率降低30%。模型强调创造经济价值&#xff0c;为职场人士提供高…

作者头像 李华