uv 新的包管理工具总结

【uv 优先的关键总结】

集成化解决方案

-- uv 除了完成基本的包安装功能,还集成了项目初始化、虚拟环境创建、依赖锁定、命令执行等功能。

-- 单一命令行工具就能管理多 Python 版本、初始化项目结构以及调试和检查代码,减少多个工具间的切换和配置工作。

依赖管理与环境一致性

-- 通过 uv add、uv lock 与 uv sync 等命令,实现对依赖包的集成管理,确保项目环境的一致性和复现性。

-- 自动创建或管理 .venv 虚拟环境,降低初学者配置环境的门槛,同时支持需求文件编译及同步安装。

多版本 Python 管理

-- uv 内建了 Python 版本管理命令(例如 uv python install、uv python pin),能够方便地安装和切换不同版本的 Python。

-- 这对于需要同时测试多个 Python 版本或迁移项目来说非常便捷。

命令执行与临时解译器切换

-- 通过 uv run 命令可在指定虚拟环境或临时指定其他解释器运行应用或命令,从而确保代码始终在正确环境中执行,增加操作灵活性。

──────────────────────────────

【与 pip、conda 等工具的对比】

与 pip 的对比

• pip 主要作为 Python 包管理器,负责下载、安装、管理 PyPI 上的包;

• uv 在底层同样会调用 pip 进行包安装,但其提供了额外的项目管理功能(如初始化、依赖锁定、多 Python 管理等),是一种更高层次的封装;

• 开发者无须分散使用多个独立工具(pip、virtualenv/venv、pyenv 等)来构建完整的开发环境,uv 可以统一处理这些任务。

与 conda 的对比

• conda 作为跨语言的包管理和虚拟环境管理工具,支持 Python 以外的依赖管理,特别适合数据科学工作流和需要处理二进制依赖的场景;

• uv 则专注于 Python 项目管理,提供了更加细粒度和定制化的依赖锁定、版本管理与环境构建流程;

• 对于需要严格控制 Python 依赖版本,并且期望命令行工具操作一致性的用户,uv 提供了一种轻量且面向开发者的解决方案;

• conda 的优势在于环境跨平台统一和管理复杂依赖,适用于科研与数据分析,而 uv 更偏向于软件开发中的项目管理和持续集成情景。

其他工具对比(如 pipenv、poetry)

• uv 同样提供了封装项目初始化、依赖锁定等功能,这些功能在 pipenv 或 poetry 中也能实现;

• 不同之处在于 uv 力求将项目管理中的所有任务(包括多版本 Python 管理、命令执行、环境同步等)都统一在一个工具下操作,减少配置与工具间的切换;

• 开发者可以根据项目需求和团队约定,选择工具链时考虑 uv 的集成化及高效操作体验。

──────────────────────────────

【总结】

选择 uv 的主要理由在于其一站式集成解决方案,能够统一实现项目初始化、依赖管理、虚拟环境与多 Python 版本协同工作,极大减少配置复杂度和工具间切换。相比之下,pip 等工具功能单一,而 conda 虽然强大但更侧重于多语言与二进制依赖的管理。如果你的主要开发场景聚焦于 Python 项目的快速开发与一致性保障,uv 提供了一种更为高效和便捷的工具链支持。

────────────────────

【0. 安装 uv 工具】

uv 工具可以通过两种方式进行安装,分别为独立安装脚本和 PyPI 安装方式:

  1. 使用独立安装器

• macOS 和 Linux 下运行下列命令:

curl -LsSf https://astral.sh/uv/install.sh | sh

• Windows 下运行下列 PowerShell 命令:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

说明:

-- 这两条命令会从 uv 官方站点下载并执行安装脚本,自动将 uv 安装到系统中。

-- 安装完成后,直接在命令行中输入 uv 应该可以运行相应命令。

-- 如果采用独立安装器安装,uv 可以通过下面的命令自动更新到最新版本:

uv self update

  1. 通过 PyPI 安装

• 使用 pip 安装:

pip install uv

• 或者使用 pipx 安装:

pipx install uv

说明:

-- 使用 pip 或 pipx 安装时,uv 会作为全局可用的命令行工具安装。

-- 推荐使用 pipx 管理命令行工具,因为这样能够隔离各个项目的依赖环境,并且更新简单。

──────────────────────────────

【1. 初始化项目】

1.1 创建项目

命令:

uv init example

说明:

-- 用于初始化一个新的项目,项目名称为 example

-- 执行后会在指定路径(如 /home/user/example)创建项目所需的基础目录与文件

示例输出:

Initialized project `example` at `/home/user/example`

1.2 进入项目目录

命令:

cd example

──────────────────────────────

【2. 添加依赖包】

2.1 添加包(如 ruff)

命令:

uv add ruff

说明:

-- 如果项目中还未创建虚拟环境,uv 会自动在 .venv 目录下创建一个新的虚拟环境

-- 命令会自动解析并安装依赖包,同时构建项目本身(例如 example 项目会以 "file://..." 的方式安装)

-- 输出中显示依赖包及其版本信息

示例输出:

Creating virtual environment at: .venv

Resolved 2 packages in 170ms

Built example @ file:///home/user/example

Prepared 2 packages in 627ms

Installed 2 packages in 1ms

+ example==0.1.0 (from file:///home/user/example)

+ ruff==0.5.0

──────────────────────────────

【3. 运行检查或其他命令】

3.1 运行检查命令,例如使用 ruff 进行代码检查:

命令:

uv run ruff check

说明:

-- uv run 用于在虚拟环境中执行命令

-- 这里运行了 ruff 代码检查操作

-- 如果检查全部通过,则显示 "All checks passed!"

示例输出:

All checks passed!

──────────────────────────────

【4. 锁定依赖】

命令:

uv lock

说明:

-- 锁定当前解析到的依赖包版本,确保环境一致性

-- 执行后会记录解析耗时与已锁定的依赖包列表

示例输出:

Resolved 2 packages in 0.33ms

──────────────────────────────

【5. 同步依赖到虚拟环境】

命令:

uv sync

说明:

-- 将锁定的依赖包同步安装到当前虚拟环境

-- 输出中会显示解析、审计以及安装的相关信息,确保依赖版本与锁定文件保持一致

示例输出:

Resolved 2 packages in 0.70ms

Audited 1 package in 0.02ms

──────────────────────────────

【6. 管理多个 Python 版本】

6.1 安装指定的 Python 版本

命令:

uv python install 3.10 3.11 3.12

说明:

-- 可根据命令提示安装多个 Python 版本

-- uv 会搜索符合要求的各个版本,并将其安装到相应目录

示例输出:

Searching for Python versions matching: Python 3.10

Searching for Python versions matching: Python 3.11

Searching for Python versions matching: Python 3.12

Installed 3 versions in 3.42s

+ cpython-3.10.14-macos-aarch64-none

+ cpython-3.11.9-macos-aarch64-none

+ cpython-3.12.4-macos-aarch64-none

──────────────────────────────

【7. 创建与切换虚拟环境】

7.1 使用指定 Python 版本创建虚拟环境

命令:

uv venv --python 3.12.0

说明:

-- 使用 --python 参数指定 Python 版本用于创建虚拟环境

-- 成功后,会在 .venv 目录下创建虚拟环境,并提示激活命令

示例输出:

Using Python 3.12.0

Creating virtual environment at: .venv

Activate with: source .venv/bin/activate

7.2 执行命令时临时切换 Python 解释器(例如利用 [email protected] 运行命令)

命令:

uv run --python [email protected] -- python --version

说明:

-- 可在 uv run 命令中通过 --python 参数指定其他 Python 版本或解释器

-- 此命令将使用 [email protected] 解释器运行 python --version 命令,返回相应版本信息

示例输出:

Python 3.8.16 (a9dbdca6fc3286b0addd2240f11d97d8e8de187a, Dec 29 2022, 11:45:30)

[PyPy 7.3.11 with GCC Apple LLVM 13.1.6 ...] on darwin

Type "help", "copyright", "credits" or "license" for more information.

7.3 固定默认 Python 版本

命令:

uv python pin 3.11

说明:

-- 将指定的 Python 版本设为项目默认使用版本,后续运行命令时自动使用该版本

──────────────────────────────

【8. 编译与安装依赖要求】

8.1 编译需求文件

命令:

uv pip compile docs/requirements.in --universal --output-file docs/requirements.txt

说明:

-- pip compile 用于根据 requirements.in 文件解析并生成确定版本的 requirements.txt 文件

-- --universal 参数适用于不同平台

-- --output-file 选项指定生成文件的路径和文件名

示例输出:

Resolved 43 packages in 12ms

8.2 安装锁定的依赖

步骤1:创建(或重建)虚拟环境

命令:

uv venv

输出示例:

Using Python 3.12.3

Creating virtual environment at: .venv

Activate with: source .venv/bin/activate

步骤2:同步安装依赖

命令:

uv pip sync docs/requirements.txt

说明:

-- pip sync 根据已编译好的 requirements.txt 文件进行依赖安装

-- 安装过程会显示每个包的安装信息,确保实际安装版本与锁定文件一致

示例输出:

Resolved 43 packages in 11ms

Installed 43 packages in 208ms

+ babel==2.15.0

+ black==24.4.2

+ certifi==2024.7.4

──────────────────────────────

【总结】

uv 是一个集成化的 Python 项目管理工具,能够完成项目初始化、依赖管理、多版本 Python 安装、虚拟环境构建以及依赖锁定等任务。通过以下步骤可实现:

  1. 安装 uv 工具(选择独立安装脚本或通过 PyPI/pipx 安装)。

  2. 快速初始化并创建项目结构。

  3. 添加依赖、运行代码检查以及锁定与同步依赖,确保环境一致性。

  4. 管理多个 Python 版本及灵活指定虚拟环境,满足不同环境需求。

  5. 利用 pip compile 编译锁定依赖版本,并利用 pip sync 确保依赖一致性。

相关推荐
__lost1 小时前
MATLAB画出3d的常见复杂有机分子和矿物的分子结构
开发语言·人工智能·matlab·化学·分子结构
每天都要写算法(努力版)1 小时前
【神经网络与深度学习】五折交叉验证(5-Fold Cross-Validation)
人工智能·深度学习·神经网络
hi星尘1 小时前
深度解析:基于Python的微信小程序自动化操作实现
python·微信小程序·自动化
郭不耐1 小时前
DeepSeek智能时空数据分析(六):大模型NL2SQL绘制城市之间连线
人工智能·数据分析·时序数据库·数据可视化·deepseek
Doker 多克2 小时前
Django 缓存框架
python·缓存·django
winfredzhang2 小时前
Deepseek 生成新玩法:从文本到可下载 Word 文档?思路与实践
人工智能·word·deepseek
KY_chenzhao3 小时前
ChatGPT与DeepSeek在科研论文撰写中的整体科研流程与案例解析
人工智能·机器学习·chatgpt·论文·科研·deepseek
安顾里3 小时前
Linux命令-iostat
linux·运维·服务器
不爱吃于先生3 小时前
生成对抗网络(Generative Adversarial Nets,GAN)
人工智能·神经网络·生成对抗网络
100编程朱老师3 小时前
面试:什么叫Linux多路复用 ?
linux·运维·服务器