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 解释器(例如利用 pypy@3.8 运行命令)

命令:

uv run --python pypy@3.8 -- python --version

说明:

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

-- 此命令将使用 pypy@3.8 解释器运行 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 确保依赖一致性。

相关推荐
Fcy64823 分钟前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
光泽雨24 分钟前
检测阈值 匹配阈值分析 金字塔
图像处理·人工智能·计算机视觉·机器视觉·smart3
袁袁袁袁满25 分钟前
Linux怎么查看最新下载的文件
linux·运维·服务器
Σίσυφος190033 分钟前
PCL 法向量估计-PCA邻域点(经典 kNN 协方差)的协方差矩阵
人工智能·线性代数·矩阵
代码游侠1 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio1 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice1 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
小鸡吃米…1 小时前
机器学习的商业化变现
人工智能·机器学习
青春不朽5121 小时前
Scrapy框架入门指南
python·scrapy