【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 安装方式:
- 使用独立安装器
• 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
- 通过 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 安装、虚拟环境构建以及依赖锁定等任务。通过以下步骤可实现:
-
安装 uv 工具(选择独立安装脚本或通过 PyPI/pipx 安装)。
-
快速初始化并创建项目结构。
-
添加依赖、运行代码检查以及锁定与同步依赖,确保环境一致性。
-
管理多个 Python 版本及灵活指定虚拟环境,满足不同环境需求。
-
利用 pip compile 编译锁定依赖版本,并利用 pip sync 确保依赖一致性。