uv - 新的 Python 包、项目和环境管理工具
Python uv 的优点
Python uv(发音为“you-vee”)是一个现代、高性能的 Python 包和项目管理工具,使用 Rust 编写。它被设计为传统 Python 包管理工具(如 pip
、pip-tools
、virtualenv
、pipx
和 pyenv
)的即插即用替代品,旨在简化并加速 Python 开发工作流程。
uv 由 Astral 团队开发,该团队也是流行的 Python 代码检查工具 Ruff 的开发者。uv 的设计旨在解决 Python 生态系统中的常见痛点,例如安装速度慢、依赖冲突和复杂的环境管理,通过利用 Rust 的性能和现代软件架构来实现。
uv 的主要功能
- 卓越的速度:uv 比传统工具快得多,通常在没有缓存的情况下比 pip 快 8–10 倍,使用热缓存时可快达 80–115 倍。
- 一体化工具:将包安装、依赖解析、虚拟环境管理、Python 版本管理、项目搭建和脚本执行集成到一个工具中。
- 兼容性:提供与 pip 兼容的命令行界面,使其易于采用,无需陡峭的学习曲线。
- 强大的依赖管理:提供精确的依赖解析和锁文件支持,以实现可重复的环境。
- 自动虚拟环境:自动创建和管理虚拟环境,减少手动设置。
- 跨平台支持:可在 macOS、Linux 和 Windows 上运行。
- 独立安装:无需 Python 或 Rust 即可安装,使用简单的安装程序或
curl
。
仍然不确定为什么使用 uv?
- 性能:显著减少包安装和依赖解析时间。
- 简洁性:将多个工具统一为一个,简化项目设置和管理。
- 可靠性:提供一致、可重复的环境,配有清晰的错误信息和冲突解决。
- 现代标准:支持
pyproject.toml
进行项目配置,与当前 Python 打包标准保持一致。
示例使用场景
让我们尝试一些令人兴奋的事情!
- 启动一个新项目:
uv init myproject
cd myproject
uv add requests
uv run python script.py
这将创建一个项目目录,设置虚拟环境,安装依赖项,并在隔离环境中运行脚本。
- 管理带有内联依赖的脚本:
uv add --script script.py requests
uv run script.py
uv 可以管理单文件脚本的依赖项,而无需单独的 requirements 文件。
与传统工具的比较
功能 | uv | pip/virtualenv | Poetry |
---|---|---|---|
速度 | 非常快 | 慢 | 中等 |
虚拟环境 | 自动 | 手动 | 自动 |
依赖解析 | 高级 | 基础 | 高级 |
Python 版本管理 | 是 | 否(需要 pyenv) | 否 |
锁文件支持 | 是 | 否(需要 pip-tools) | 是 |
脚本执行 | 集成 | 否 | 有限 |
如何在系统上安装并开始使用 UV
要在系统上安装并开始使用 uv,请按照以下简单步骤操作:
安装
- 独立安装程序(推荐)
- Linux/macOS:
curl -LsSf https://astral.sh/uv/install.sh | sh
或者,如果您更喜欢使用 wget
:
wget -qO- https://astral.sh/uv/install.sh | sh
- Windows(PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- 特定版本:您可以通过在 URL 中包含特定版本来请求特定版本,例如
https://astral.sh/uv/0.7.15/install.sh
。
- 替代方案:通过 pip 安装(如果您已安装 Python)
pip install uv
注意:除非您清楚自己在做什么,否则不建议使用此方法进行系统范围的安装,因为它可能会使您的系统 Python 环境变得杂乱。
- 通过 pipx 安装(用于独立、用户范围的安装)
pipx install uv
如果已经使用 pipx
,此方法对于全局访问更干净。
入门
检查安装 - 运行:
uv
您应该看到一个帮助菜单,确认 uv 已安装并准备就绪。
创建并激活虚拟环境
- 创建 venv:
uv venv test
- 在 Linux/macOS 上激活:
source test/bin/activate
- 在 Windows 上激活:
.\test\Scripts\activate
现在您可以使用 uv pip install
在此环境中安装包。
初始化新项目
uv init
这将为您的项目创建 pyproject.toml
和 .gitignore
。
添加依赖项
添加一个包:
uv add
这将更新 pyproject.toml
并生成/更新锁文件。
同步依赖项
在您的环境中安装所有依赖项:
uv sync
或者,使用 pip 兼容接口:
uv pip install
这确保所有依赖项根据您的锁文件安装。
运行脚本
使用:
uv run script.py
这将自动管理脚本的环境和依赖项。
Shell 集成(可选)
为了更流畅的工作流程,您可以将 shell 集成添加到您的 .zshrc
或 .bashrc
中,以自动激活默认虚拟环境并将 pip
别名为 uv pip
。
通过这些步骤,您将安装好 uv,并准备好以快速和简便的方式管理 Python 项目。
安装特定 Python 版本
您可以使用 uv 来安装特定的 Python 版本,并在项目中管理它们。
- 安装最新的稳定 Python 版本:
此命令下载并安装最新的稳定 Python 版本。uv python install
- 安装特定版本:
这将安装 Python 3.12 的最新补丁版本(例如 3.12.3)。uv python install 3.12
- 安装确切的补丁版本:
这将安装确切的 Python 3.12.3。uv python install 3.12.3
- 安装多个版本:
这将安装 Python 3.9、3.10 和 3.11。uv python install 3.9 3.10 3.11
- 安装满足约束的版本:
这将更改项目的 Python 版本要求。uv python install '>=3.8,=3.11"
其他注意事项
自动下载:默认情况下,如果系统中未找到 Python 版本,uv 将自动下载并安装所需的 Python 版本。
系统 Python:如果存在,uv 可以使用现有的 Python 安装,或者您可以使用 --no-managed-python
标志强制其使用系统 Python。
升级:您可以使用以下命令将 uv 管理的 Python 版本升级到最新的补丁版本:
uv python upgrade 3.12
或者升级所有已安装的版本:
uv python upgrade
不支持跨小版本(例如从 3.12 升级到 3.13)的升级。
总之,uv 提供了灵活且强大的工具,用于在您的项目中安装、管理和使用特定的 Python 版本。
UV 如何在不同系统上发现可用的 Python 解释器
UV 通过检查一组明确定义的位置并在每个候选对象上查询其版本元数据,来发现不同系统上可用的 Python 解释器。以下是其工作方式:
- 管理的 Python 安装:
UV 首先查看由UV_PYTHON_INSTALL_DIR
环境变量指定的目录,该目录存储其自己的管理 Python 版本。 - 系统 PATH:
在 macOS 和 Linux 上,UV 检查系统PATH
中列出的目录中的名为python
、python3
或python3.x
(其中x
是版本号)的可执行文件。在 Windows 上,它查找python.exe
。 - Windows 特定位置:
在 Windows 上,UV 还会检查 Windows 注册表和 Microsoft Store Python 解释器,使用py --list-paths
的输出。 - 虚拟环境:
如果激活了虚拟环境或指定了虚拟环境,UV 会在检查其他位置之前检查该环境中的解释器是否兼容。 - 元数据查询:
每个发现的可执行文件都会被查询其版本元数据。只有与请求的版本(或版本约束)匹配的可执行文件才会被考虑。非可执行文件会被忽略。 - 偏好和回退:
默认情况下,UV 偏好系统 Python 安装,但您可以使用选项来调整,以优先使用管理的或仅使用管理的/系统版本。如果没有找到合适的解释器,UV 可以下载并安装所需的版本。
这种强大的发现过程确保 UV 可以在不同操作系统和环境中可靠地定位并使用正确的 Python 解释器。
有用的链接
- uv 主页:https://docs.astral.sh/uv/
- uv 包:https://pypi.org/project/uv/
- uv 的 GitHub:https://github.com/astral-sh/uv/
- Python 速查表
- Conda 速查表
- venv 速查表
- Bash 速查表
- Ollama 速查表
- venv 速查表
- 编程语言和框架流行度