DJ王大海

Back

使用 UV 来管理使用 PythonBlur image

uv 是由 Astral 开发的一个极其快速的 Python 包和项目管理工具,使用 Rust 编写。它旨在统一和简化 Python 的包管理、项目管理、Python 版本管理等多个方面,提供类似于 Rust 语言中 Cargo 的功能。

主要功能#

  • 包管理uv 可以替代 pippip-tools 等工具,提供更高效的包安装和解析功能,速度提升可达 10 至 100 倍。
  • 项目管理:支持使用 pyproject.toml 文件管理项目依赖,生成跨平台的锁定文件,确保项目环境的一致性。
  • 工具管理:类似于 pipxuv 可以在隔离的虚拟环境中安装和运行命令行工具,并支持一次性运行无需显式安装的命令。
  • Python 版本管理uv 能够安装和管理不同版本的 Python,支持快速切换,简化 Python 版本的管理。
  • 脚本支持uv 可以管理带有内联依赖元数据的单文件脚本,确保脚本在隔离的环境中运行,避免依赖冲突。

安装方法#

Mac 和 Linux:

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

也可以使用包管理器来进行安装。

Windows:

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

在 Windows 上更推荐使用 Scoop 来进行安装:

scoop install uv
powershell

如果不知道什么是 scoop 可以通过这篇文章来了解。

除了上面两种方式以外,uv 还可以通过pip 安装:

pip install uv
sh

使用指南#

Python 版本管理#

查看支持的 Python 版本

使用以下命令可以查看 uv 支持的 Python 版本:

# 查看所有的可安装版本
uv python list
# 仅查看所有的已安装版本
uv python list --installed
sh

这将显示可用的 Python 版本列表,包括不同的主次版本。

安装特定版本的 Python

使用以下命令安装特定版本的 Python,例如安装 Python 3.13:

uv python install 3.13
sh

这会下载并安装 Python 3.11 到 uv 的管理路径中。

切换 Python 版本

使用以下命令切换到某个已经安装的 Python 版本,例如 Python 3.13:

uv python use 3.13
bash

项目管理#

初始化一个新项目

可以通过以下命令初始化一个名为 my_project 的项目

uv init my_project
cd my_project
sh

可以得到一个这样的文件夹:

 tree  
.  
├── hello.py  
├── pyproject.toml  
└── README.md
sh

其中 pyproject.toml 是这个 Python 项目中的配置文件,可以包含以下内容:

  1. [build-system]: 定义构建项目所需的系统和工具。
  2. [tool]: 配置各种工具的选项,如格式化工具、测试工具等。
  3. [project]: 描述项目的元数据,如项目名称、版本、描述等。

添加依赖

以添加依赖 requests 为例:

# 默认安装最新版本的依赖
uv add requests

# 安装指定版本的依赖
uv add requests@1.0.0
sh

这个命令会在 pyproject.toml 中的 dependencies 部分添加类似以下内容:

pyproject
[project]
name = "my-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
    "requests>=2.32.3"
]
toml

当从已有的 pyproject.toml 恢复环境时,则需运行:

uv sync
sh

删除依赖

以删除依赖 requests 为例:

uv remove requests
sh

运行项目#

以演示中所创建的 my_project 为例:

uv run hello.py
sh
使用 UV 来管理使用 Python
https://astro-pure.js.org/blog/2024/uv-python
Author 小岛秀儿
Published at 2024年12月12日
Comment seems to stuck. Try to refresh?✨