优秀的编程知识分享平台

网站首页 > 技术文章 正文

一个用 Rust 开发的极快、易用的 Python 包和项目管理利器

nanyue 2025-03-14 19:32:34 技术文章 2 ℃

uv 是一个全新的、由 Astral 团队(就是那个开发了 Ruff 的团队)采用 Rust 开发的高性能的 Python 包和项目管理工具。它的目标是取代传统的 pip 和 pip-tools,提供更快的速度和更强大的功能。简单来说,uv 就是 Python 开发的“加速器”!

主要亮点

一款替代 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 等工具的全能解决方案。 比 pip 快 10 到 100 倍。 提供完整的项目管理,配备通用锁文件。 支持运行脚本,兼容内联依赖元数据。 可安装并管理 Python 版本。 能够运行和安装基于 Python 包发布的工具。 内置 pip 兼容接口,在保留熟悉 CLI 的同时提升性能。 支持 Cargo 式工作区,助力大型项目管理。 高效利用磁盘空间,全局缓存实现依赖去重。 无需 Rust 或 Python 环境,通过 curl 或 pip 即可安装。 全面支持 macOS、Linux 和 Windows 系统。

uv 显著的特点是速度:

开启缓存的情况下安装 Trio 的依赖


解析启用了所有可选依赖项的 Transformers 项目(左无缓存,右有缓存)


解析jupyter项目依赖(左无缓存,右有缓存)


uv 安装

uv 安装非常简单,且支持多种安装方式。

独立安装

uv 提供了一个独立的安装程序来下载和安装 uv。

macOS and Linux 安装 uv

使用 curl 下载安装脚本并使用 sh 命令执行安装脚本进行安装:


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

如果您的系统没有安装 curl,则可以使用 wget 安装:

wget -qO- https://astral.sh/uv/install.sh | sh

可以通过在 URL 中包含特定版本来请求该版本:

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

提示

使用前可以检查安装脚本,shell 命令:
curl -LsSf
https://astral.sh/uv/install.sh | less

或者,可以直接从 GitHub 下载安装程序或二进制文件。


提示

使用前可以检查安装脚本,shell 命令:
curl -LsSf
https://astral.sh/uv/install.sh | less

或者,可以直接从 GitHub 下载安装程序或二进制文件。


Windows 系统安装 uv

使用irm iex 下载并执行安装:

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

安装后,可以在 powershell命令行或者cmd命令行下验证是否安装成:

在命令行执行不给定参数的 uv 命令会显示其用法帮助:

查看 uv 的版本可以使用:

uv version

可以通过在 URL 中包含特定版本来请求该版本:

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

提示

使用前可以检查安装脚本,Powershell 命令:
powershell -c "irm
https://astral.sh/uv/install.ps1 | more"

或者,可以直接从 GitHub 下载安装程序或二进制文件。


PyPI 安装

推荐使用pipx 命令:

pipx install uv

或者使用 pip 命令:

pip install uv

Cargo 安装

如果你的系统安装了 rust 可以通过 Cargo 安装(必须通过 Git 构建)

cargo install --git https://github.com/astral-sh/uv uv

Homebrew 安装

brew install uv

WinGet 安装

winget install --id=astral-sh.uv  -e

Scoop 安装

scoop install main/uv

升级更新 uv

uv self update

或者使用 pip 升级

pip install --upgrade uv

shell 自动补全

uv 命令自动补全

bash

echo 'eval "$(uv generate-shell-completion bash)"' >> ~/.bashrc

Zsh

echo 'eval "$(uv generate-shell-completion zsh)"' >> ~/.zshrc

fish

echo 'uv generate-shell-completion fish | source' >> ~/.config/fish/config.fish

Elvish

echo 'eval (uv generate-shell-completion elvish | slurp)' >> ~/.elvish/rc.elv

PowerShell / pwsh

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}
Add-Content -Path $PROFILE -Value '(& uv generate-shell-completion powershell) | Out-String | Invoke-Expression'

执行完毕重新启动powershell终端即可使用 uv 的命令行补全功能。

uvx 命令自动补全

bash

echo 'eval "$(uvx --generate-shell-completion bash)"' >> ~/.bashrc

Zsh

echo 'eval "$(uvx --generate-shell-completion zsh)"' >> ~/.zshrc

fish

echo 'uvx --generate-shell-completion fish | source' >> ~/.config/fish/config.fish

Elvish

echo 'eval (uvx --generate-shell-completion elvish | slurp)' >> ~/.elvish/rc.elv

PowerShell / pwsh

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}
Add-Content -Path $PROFILE -Value '(& uvx --generate-shell-completion powershell) | Out-String | Invoke-Expression'

卸载 uv

清除缓存数据

uv cache clean
rm -r "$(uv python dir)"
rm -r "$(uv tool dir)"

清除 uv 或者 uvx 程序

macOS and Linux

rm ~/.local/bin/uv ~/.local/bin/uvx

Windows

$ rm $HOME\.local\bin\uv.exe
$ rm $HOME\.local\bin\uvx.exe

uv 主要功能

uv 功能丰富,提供从安装 Python 和运行简单脚本,到支持多 Python 版本和多平台的大型项目开发的各个方面。

uv 的功能可以分为多个模块,我们可以根据需要单独或组合使用这些模块。

Python 版本管理

安装和管理 Python 版本。

  • uv python install:安装 Python 版本。
  • uv python list:查看可用的 Python 版本。
  • uv python find:查找已安装的 Python 版本。
  • uv python pin:为当前项目指定使用的 Python 版本。
  • uv python uninstall:卸载 Python 版本。

执行脚本

运行独立的 Python 脚本,例如example.py 。

  • uv run:运行脚本。
  • uv add --script:为脚本添加依赖。
  • uv remove --script:从脚本中移除依赖。

项目管理

创建并管理包含 pyproject.toml 的 Python 项目。

  • uv init:创建一个新项目。
  • uv add:为项目添加依赖项。
  • uv remove:从项目中移除依赖项。
  • uv sync:同步项目依赖环境。
  • uv lock:创建项目依赖锁文件。
  • uv run:在项目环境中运行命令。
  • uv tree:查看项目的依赖树。
  • uv build:构建项目的发布包。
  • uv publish:发布项目到包索引。

工具

运行和安装发布在 Python 包索引的工具(如 ruff 或 black)。

  • uvx / uv tool run:在临时环境中运行工具。
  • uv tool install:全局安装工具。
  • uv tool uninstall:卸载工具。
  • uv tool list:列出已安装的工具。
  • uv tool update-shell:更新 shell,使工具可执行文件生效。

pip 接口

手动管理环境和包,适用于需要精细控制的传统工作流或场景。

创建虚拟环境(替代 venv 和 virtualenv)

  • uv venv:创建一个新的虚拟环境。

管理环境中的包(替代 pip 和 pipdeptree)

  • uv pip install:安装包到当前环境。
  • uv pip show:显示已安装包的详细信息。
  • uv pip freeze:列出已安装包及其版本。
  • uv pip check:检查当前环境中的包是否兼容。
  • uv pip list:列出已安装的包。
  • uv pip uninstall:卸载包。
  • uv pip tree:查看环境的依赖树。

锁定环境中的包(替代 pip-tools)

  • uv pip compile:将需求文件编译为锁文件。
  • uv pip sync:根据锁文件同步环境。

实用工具

管理和查看 uv 的状态,如:缓存、存储目录,或执行自更新:

  • uv cache clean:清理缓存条目。
  • uv cache prune:清理过期的缓存条目。
  • uv cache dir:显示 uv 缓存目录路径。
  • uv tool dir:显示 uv 工具目录路径。
  • uv python dir:显示 uv 安装的 Python 版本路径。
  • uv self update:将 uv 更新到最新版本。

查看 uv 帮助

简洁帮助:

uv --help
uv init --help

详细帮助:

uv help
uv help init

查看 uv 版本

uv version
uv --version      # Same output as `uv version`
uv -V             # Will not include the build commit and date
uv pip --version  # Can be used with a subcommand

安装 Python

安装最新版本的 Python

uv python install

提示

uv 并不使用 Python 官方发布的版本,而是使用来自 Astral 维护的 python-build-standalone 项目发布的 Python 版本。该项目支持CPython、PyPy、GraalPy版本。

安装指定版本的 Python

安装特定的 Python 版本:

uv python install 3.12

一条命令安装多个 Python 版本:

uv python install 3.11 3.12

安装符合约束条件的版本:

uv python install '>=3.8,<3.10'

安装特定的 Python 实现,例如 PyPy:

uv python install pypy@3.10

查看已安装和可用的 Python 版本:

uv python list

查看所有版本:

uv python list --all-versions

查看其他平台的 Python 版本:

uv python list --all-platforms

仅显示已安装的 Python 版本,并排除下载版本:

uv python list --only-installed

查找 Python 可执行文件:

uv python find

如:

uv python find >=3.11

uv python find --system

隐式安装(自动安装)Python

使用 uv 时可以自动下载需要的Python版本。

uv run --python 3.12 python -c 'print("hello world")'

重新安装 Python

uv python install --reinstall

使用现有的 Python 安装

uv 会使用系统中满足命令行要求的 Python 版本。

项目管理

创建新项目

uv init hello-world
cd hello-world

或者

mkdir hello-world
cd hello-world
uv init

uv 将创建以下文件:

.
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml

项目结构

.
├── .venv
│   ├── bin
│   ├── lib
│   └── pyvenv.cfg
├── .python-version
├── README.md
├── hello.py
├── pyproject.toml
└── uv.lock

项目 pyproject.toml 文件

pyproject.toml 文件包含有关项目的元数据

[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = []

.python-version

该文件包含项目的默认 Python 版本。此文件告诉 uv 创建项目的虚拟环境时使用哪个 Python 版本。

.venv

该文件夹包含项目的虚拟环境,即 Python 环境,即 与系统的其余部分隔离。这是 uv 将安装项目依赖项的位置。

uv.lock

uv.lock是一个跨平台的 lockfile,其中包含有关项目的依赖。与 which 不同,它用于指定 project 中,lockfile 包含项目中安装的确切解析版本 环境。此文件应签入版本控制中,以实现一致且 跨计算机可重复安装。

管理依赖项

您可以使用该命令将依赖项添加到您的 .这也将更新 lockfile 和项目环境:pyproject.toml

uv add requests

可以指定版本约束或替代源

# Specify a version constraint
uv add 'requests==2.31.0'

# Add a git dependency
uv add git+https://github.com/psf/requests

要删除包:


uv remove requests

升级软件包:


uv lock --upgrade-package requests

手动更新环境(Windows):

uv sync

source .venv\Scripts\activate
flask run -p 3000
python example.py

手动更新环境(macOS 和 Linux):

uv sync

source .venv/bin/activate
flask run -p 3000
python example.py

构建包

uv build可用于为您的 项目。

默认情况下,将在当前目录中构建项目,并将构建的 子目录中的工件:uv builddist/

uv build
ls dist/

发布包

使用 uv publish 发布Python包:

uv publish

运行脚本

Python 脚本是用于独立执行的文件,例如,使用 .用 UV 执行脚本可确保无需手动管理即可管理脚本依赖项 环境。 python <脚本>.py

运行没有依赖项的脚本

如果您的脚本没有依赖项,则可以使用 :uv run

example.py

print("Hello world")
uv run example.py

向脚本提供参数:

uv run example.py test


uv run example.py hello world!

直接从 stdin 读取您的脚本:

echo 'print("hello world!")' | uv run -
uv run - <<EOF
print("hello world!")
EOF

运行具有依赖项的脚本

当您的脚本需要其他软件包时,必须将它们安装到 脚本运行。UV 更喜欢按需创建这些环境,而不是使用长期 具有手动管理的依赖项的虚拟环境。这需要显式声明 脚本所需的依赖项。通常,建议使用项目或内联元数据来声明 dependencies,但 UV 也支持每次调用请求依赖项。

例如,以下脚本需要 .rich

example.py

import time
from rich.progress import track

for i in track(range(20), description="For example:"):
    time.sleep(0.05)

使用以下选项请求依赖项:--with

uv run --with rich example.py

创建 Python 脚本

Python 最近为内联脚本元数据添加了标准格式。 它允许选择 Python 版本和定义依赖项。用于 使用内联元数据初始化脚本:uv init --script

uv init --script example.py --python 3.12

声明脚本依赖项

内联元数据格式允许在脚本本身中声明脚本的依赖项。

UV 支持为您添加和更新内联脚本元数据。用于声明 脚本的依赖项:uv add --script

uv add --script example.py 'requests<3' 'rich'

这将在脚本顶部添加一个部分,使用 TOML 声明依赖项:script

example.py

# /// script
# dependencies = [
#   "requests<3",
#   "rich",
# ]
# ///

import requests
from rich.pretty import pprint

resp = requests.get("https://peps.python.org/api/peps.json")
data = resp.json()
pprint([(k, v["title"]) for k, v in data.items()][:10])

使用不同的 Python 版本

uv 允许在每次脚本调用时请求任意 Python 版本,例如:

example.py

import sys

print(".".join(map(str, sys.version_info[:3])))

运行:

# Use the default Python version, may differ on your machine
uv run example.py

指定Python版本

# Use a specific Python version
uv run --python 3.10 example.py

包管理

将包安装到虚拟环境中,如 numpy:

uv pip install numpy

一次安装多个包:

uv pip install numpy pandas

安装带有约束的包,例如安装 Ruff v0.2.0 或者更新版本:

uv pip install 'ruff>=0.2.0'

安装特定版本的包,例如安装 Ruff v0.3.0:

uv pip install 'ruff==0.3.0'

从本地磁盘安装包:

uv pip install "ruff @ ./projects/ruff"

从 GitHub 安装包:

uv pip install "git+https://github.com/astral-sh/ruff"

从 GitHub 安装特定的包:

# 安装某个标签
uv pip install "git+https://github.com/astral-sh/ruff@v0.2.0"

# 安装某个提交
uv pip install "git+https://github.com/astral-sh/ruff@1fadefa67b26508cc59cf38e6130bde2243c929d"

# 安装某个分支
uv pip install "git+https://github.com/astral-sh/ruff@main"

可编辑包

可编辑包指不需要重新安装,可以通过修改源代码使更改生效。

将当前项目安装为可编辑包:

uv pip install -e .

将另一个目录中的项目安装为可编辑包:

uv pip install -e "ruff @ ./project/ruff"

从文件安装包

通过标准文件格式一次性安装多个包。

从 requirements.txt 文件安装:

uv pip install -r requirements.txt

从 pyproject.toml 文件安装:

uv pip install -r pyproject.toml

从 pyproject.toml 文件安装时启用可选依赖项:

uv pip install -r pyproject.toml --extra foo

从 pyproject.toml 文件安装时启用所有可选依赖项:

uv pip install -r pyproject.toml --all-extras

卸载包

卸载包:

uv pip uninstall flask
uv pip uninstall flask ruff

列出已安装的包

列出已安装的包:

uv pip list

以 JSON 格式列出包:

uv pip list --format json

以 requirements.txt 格式列出环境中所有包:

uv pip freeze

检查包信息

查看已安装包的信息:

uv pip show numpy

验证环境

如果在多个步骤中安装了包,可能会将具有冲突要求的包安装到同一个环境中。

检查环境中是否有冲突或缺失的依赖项:

uv pip check

Python 环境(虚拟环节)

创建虚拟环境

uv venv

指定特定的名称或路径

uv venv my-name

为虚拟环境指定 Python解释器版本:

uv venv --python 3.11

提示

注意,这要求所请求的 Python 版本已安装在系统上。

使用虚拟环境:

当使用默认的虚拟环境名称时,uv 会自动查找并在后续调用中使用该虚拟环境。

uv venv

# 在新虚拟环境中安装包
uv pip install ruff

“激活”虚拟环境

可以“激活”虚拟环境,以使其包可用:

在 macOS 和 Linux 系统下激活虚拟环境:

source .venv/bin/activate

在 Windows 系统下激活虚拟环境:

.venv\Scripts\activate

“退出”虚拟环境

deactivate

项目实操

以一个小的游戏项目简单演示使用 uv 管理 Python 项目和包。

因为是验证 uv 的使用,所以游戏代码就直接用 DeepSeek 生成一段演示代码。

1. 生成游戏的 Python 脚本

使用 DeepSeek 生成一个模拟超级玛丽游戏的 Python 脚本。因为是简单模拟,提示词就一句话“帮我一个超级玛丽小游戏的Python程序”,生成Python脚本文件命名为:superMario.py,代码如下:

superMario.py

import pygame
import sys

# 初始化Pygame
pygame.init()

# 游戏常量
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
GRAVITY = 0.8
JUMP_POWER = -15
PLAYER_SPEED = 5

# 颜色定义
SKY_BLUE = (135, 206, 235)
BROWN = (139, 69, 19)
YELLOW = (255, 255, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)

# 初始化屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Super Mario")

clock = pygame.time.Clock()

class Mario(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((30, 40))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.center = (100, SCREEN_HEIGHT - 100)
        self.velocity_y = 0
        self.on_ground = False

    def update(self):
        # 重力
        self.velocity_y += GRAVITY
        self.rect.y += self.velocity_y

        # 地面检测
        if self.rect.bottom >= SCREEN_HEIGHT - 50:
            self.rect.bottom = SCREEN_HEIGHT - 50
            self.on_ground = True
            self.velocity_y = 0

    def jump(self):
        if self.on_ground:
            self.velocity_y = JUMP_POWER
            self.on_ground = False

class Block(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(BROWN)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

class Goomba(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface((30, 30))
        self.image.fill(BROWN)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.direction = 1
        self.speed = 2

    def update(self):
        self.rect.x += self.speed * self.direction
        # 简单AI - 碰到边缘转向
        if self.rect.right > SCREEN_WIDTH or self.rect.left < 0: self.direction all_sprites='pygame.sprite.Group()' blocks='pygame.sprite.Group()' enemies='pygame.sprite.Group()' for x in range0 screen_width 50: block='Block(x,' screen_height - 50 50 50 blocks.addblock all_sprites.addblock platforms='[' block200 400 100 20 block400 300 100 20 block600 200 100 20 blocks.addplatforms all_sprites.addplatforms goomba='Goomba(500,' screen_height - 80 enemies.addgoomba all_sprites.addgoomba mario='Mario()' all_sprites.addmario def handle_collision: hits='pygame.sprite.spritecollide(mario,' blocks false for hit in hits: if mario.velocity_y> 0:  # 下落时碰撞
            mario.rect.bottom = hit.rect.top
            mario.on_ground = True
            mario.velocity_y = 0
        elif mario.velocity_y < 0:  # 上升时碰撞
            mario.rect.top = hit.rect.bottom
            mario.velocity_y = 0

    # 敌人碰撞检测
    enemy_hits = pygame.sprite.spritecollide(mario, enemies, False)
    for enemy in enemy_hits:
        if mario.rect.bottom < enemy.rect.centery:  # 踩到敌人
            enemy.kill()
            mario.velocity_y = JUMP_POWER/2
        else:  # 侧面碰撞
            game_over()

def game_over():
    pygame.quit()
    sys.exit()

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                mario.jump()

    # 获取按键状态
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        mario.rect.x -= PLAYER_SPEED
    if keys[pygame.K_RIGHT]:
        mario.rect.x += PLAYER_SPEED

    # 更新游戏状态
    all_sprites.update()
    handle_collision()

    # 保持马里奥在屏幕内
    if mario.rect.left < 0: mario.rect.left='0' if mario.rect.right> SCREEN_WIDTH:
        mario.rect.right = SCREEN_WIDTH

    # 绘制画面
    screen.fill(SKY_BLUE)
    all_sprites.draw(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

可见代码用了 pygame 包。

2.创建游戏项目(windows系统)

启动Powrshell终端,输入以下命令创建项目,并进入到项目目录。

uv init game
cd game

3.添加 pygame 包,并同步

uv add pygame
uv sync

4. 将 superMario.py 复制到 game 目录

复制后,目录内容大致如下:

5. 启动虚拟环境,执行游戏脚本

.\.venv\Scripts\activate

python superMario.py


6. 结束游戏,退出虚拟环境

退出虚拟环境命令:

deactivate

环境变量

uv 定义并支持以下环境变量:

环境变量

说明

UV_BREAK_SYSTEM_PACKAGES

等同于 --break-system-packages 命令行参数。如果设置为 true,uv 将允许安装与系统安装的软件包冲突的软件包。 警告:UV_BREAK_SYSTEM_PACKAGES=true 仅应在持续集成(CI)或容器化环境中使用,并应谨慎使用,因为修改系统 Python 可能导致意外行为。

UV_BUILD_CONSTRAINT

等同于 --build-constraint 命令行参数。如果设置,uv 将使用该文件作为源代码分发构建的约束。使用以空格分隔的文件列表。

UV_CACHE_DIR

等同于 --cache-dir 命令行参数。如果设置,uv 将使用此目录进行缓存,而不是默认的缓存目录。

UV_COMPILE_BYTECODE

等同于 --compile-bytecode 命令行参数。如果设置,uv 将在安装后编译 Python 源代码文件为字节码。

UV_CONCURRENT_BUILDS

设置 uv 在任何给定时间并发构建的源代码分发包的最大数量。

UV_CONCURRENT_DOWNLOADS

设置 uv 在任何给定时间并发下载的最大数量。

UV_CONCURRENT_INSTALLS

控制安装和解压包时使用的线程数。

UV_CONFIG_FILE

等同于 --config-file 命令行参数。期望一个指向本地 uv.toml 配置文件的路径。

UV_CONSTRAINT

等同于 --constraint 命令行参数。如果设置,uv 将使用该文件作为约束文件。使用以空格分隔的文件列表。

UV_CUSTOM_COMPILE_COMMAND

等同于 --custom-compile-command 命令行参数。用于在 uv pip compile 生成的 requirements.txt 文件的输出头部覆盖 uv。适用于从包装脚本中调用 uv pip compile 的情况,以便在输出文件中包含包装脚本的名称。

UV_DEFAULT_INDEX

等同于 --default-index 命令行参数。如果设置,uv 将在搜索软件包时使用此 URL 作为默认索引。

UV_ENV_FILE

.env 文件,用于在执行 uv run 命令时加载环境变量。

UV_EXCLUDE_NEWER

等同于 --exclude-newer 命令行参数。如果设置,uv 将排除在指定日期之后发布的分发包。

UV_EXTRA_INDEX_URL

等同于 --extra-index-url 命令行参数。如果设置,uv 将使用此空格分隔的 URL 列表作为额外的索引来搜索软件包。 (已弃用:改用 UV_INDEX。)

UV_FIND_LINKS

等同于 --find-links 命令行参数。如果设置,uv 将使用此以逗号分隔的额外位置列表来搜索软件包。

UV_FROZEN

等同于 --frozen 命令行参数。如果设置,uv 将运行而不更新 uv.lock 文件。

UV_GITHUB_TOKEN

等同于自我更新的 --token 参数。用于身份验证的 GitHub 令牌。

UV_HTTP_TIMEOUT

HTTP 请求的超时时间(以秒为单位)。默认值:30 秒。

UV_INDEX

等同于 --index 命令行参数。如果设置,uv 将使用此空格分隔的 URL 列表作为额外的索引来搜索软件包。

UV_INDEX_STRATEGY

等同于 --index-strategy 命令行参数。例如,如果设置为 unsafe-any-match,uv 将考虑通过所有索引 URL 提供的给定软件包版本,而不是将其搜索限制在包含该软件包的第一个索引 URL。

UV_INDEX_URL

等同于 --index-url 命令行参数。如果设置,uv 将使用此 URL 作为默认索引来搜索软件包。 (已弃用:改用 UV_DEFAULT_INDEX。)

UV_INDEX_{name}_PASSWORD

为 HTTP 基本身份验证密码生成环境变量键。

UV_INDEX_{name}_USERNAME

为 HTTP 基本身份验证用户名生成环境变量键。

UV_INSECURE_HOST

等同于 --allow-insecure-host 参数。

UV_INSTALLER_GHE_BASE_URL

用于通过独立安装程序和 self update 功能下载 uv 的 URL,替代默认的 GitHub 企业版 URL。

UV_INSTALLER_GITHUB_BASE_URL

用于通过独立安装程序和 self update 功能下载 uv 的 URL,替代默认的 GitHub URL。

UV_INSTALL_DIR

使用独立安装程序和 self update 功能安装 uv 的目录。默认值为 ~/.local/bin。

UV_KEYRING_PROVIDER

等同于 --keyring-provider 命令行参数。如果设置,uv 将使用此值作为密钥环提供者。

UV_LINK_MODE

等同于 --link-mode 命令行参数。如果设置,uv 将使用此值作为链接模式。

UV_LOCKED

等同于 --locked 命令行参数。如果设置,uv 将确保 uv.lock 文件保持不变。

UV_NATIVE_TLS

等同于 --native-tls 命令行参数。如果设置为 true,uv 将使用系统的信任存储,而不是捆绑的 webpki-roots crate。

UV_NO_BUILD_ISOLATION

等同于 --no-build-isolation 命令行参数。如果设置,uv 将在构建源分发包时跳过隔离。

UV_NO_CACHE

等同于 --no-cache 命令行参数。如果设置,uv 将不会在任何操作中使用缓存。

UV_NO_CONFIG

等同于 --no-config 命令行参数。如果设置,uv 将不会读取当前目录、父目录或用户配置目录中的任何配置文件。

UV_NO_ENV_FILE

执行 uv run 命令时忽略 .env 文件。

UV_NO_PROGRESS

等同于 --no-progress 命令行参数。禁用所有进度输出。例如,旋转器和进度条。

UV_NO_SYNC

等同于 --no-sync 命令行参数。如果设置,uv 将跳过更新环境。

UV_NO_VERIFY_HASHES

等同于 --no-verify-hashes 命令行参数。禁用 requirements.txt 文件的哈希验证。

UV_NO_WRAP

用于禁用诊断信息的换行。

UV_OVERRIDE

等同于 --override 命令行参数。如果设置,uv 将使用此文件作为覆盖文件。使用以空格分隔的文件列表。

UV_PRERELEASE

等同于 --prerelease 命令行参数。例如,如果设置为 allow,uv 将允许所有依赖项使用预发布版本。

UV_PREVIEW

等同于 --preview 命令行参数。启用预览模式。

UV_PROJECT_ENVIRONMENT

指定用于项目虚拟环境的目录路径。有关详细信息,请参见 项目文档。

UV_PUBLISH_CHECK_URL

如果文件已存在于索引中,则不上传该文件。值为索引的 URL。

UV_PUBLISH_PASSWORD

等同于 uv publish 中的 --password 命令行参数。如果设置,uv 将使用此密码进行发布。

UV_PUBLISH_TOKEN

等同于 uv publish 中的 --token 命令行参数。如果设置,uv 将使用此令牌(用户名为 token)进行发布。

UV_PUBLISH_URL

等同于 uv publish 中的 --publish-url 命令行参数。用于 uv publish 的索引上传端点的 URL。

UV_PUBLISH_USERNAME

等同于 uv publish 中的 --username 命令行参数。如果设置,uv 将使用此用户名进行发布。

UV_PYPY_INSTALL_MIRROR

托管的 PyPy 安装包是从 python.org 下载的。可以将此变量设置为镜像 URL,以使用不同的源下载 PyPy 安装包。提供的 URL 将替代
https://downloads.python.org/pypy,例如,
https://downloads.python.org/pypy/pypy3.8-v7.3.7-osx64.tar.bz2。可以通过使用 file:// URL 方案从本地目录读取分发包。

UV_PYTHON

等同于 --python 命令行参数。如果设置为路径,uv 将使用此 Python 解释器进行所有操作。

UV_PYTHON_BIN_DIR

指定存放已安装的、托管的 Python 可执行文件的目录。

UV_PYTHON_DOWNLOADS

等同于 python-downloads 设置,并且在禁用时等同于 --no-python-downloads 选项。控制 uv 是否允许下载 Python。

UV_PYTHON_INSTALL_DIR

指定存储托管 Python 安装包的目录。

UV_PYTHON_INSTALL_MIRROR

托管的 Python 安装包是从 python-build-standalone 下载的。可以将此变量设置为镜像 URL,以使用不同的源下载 Python 安装包。提供的 URL 将替代
https://github.com/indygreg/python-build-standalone/releases/download,例如,
https://github.com/indygreg/python-build-standalone/releases/download/20240713/cpython-3.12.4%2B20240713-aarch64-apple-darwin-install_only.tar.gz。可以通过使用 file:// URL 方案从本地目录读取分发包。

UV_PYTHON_PREFERENCE

等同于 --python-preference 命令行参数。控制 uv 是否更偏好使用系统 Python 版本或托管的 Python 版本。

UV_REQUEST_TIMEOUT

HTTP 请求的超时时间(以秒为单位)。等同于 UV_HTTP_TIMEOUT。

UV_REQUIRE_HASHES

等同于 --require-hashes 命令行参数。如果设置为 true,uv 将要求所有依赖项在要求文件中指定哈希值。

UV_RESOLUTION

等同于 --resolution 命令行参数。例如,如果设置为 lowest-direct,uv 将安装所有直接依赖项的最低兼容版本。

UV_STACK_SIZE

用于增加在 Windows 上调试版本中 uv 使用的堆栈大小。

UV_SYSTEM_PYTHON

等同于 --system 命令行参数。如果设置为 true,uv 将使用在系统 PATH 中找到的第一个 Python 解释器。警告:UV_SYSTEM_PYTHON=true 仅适用于持续集成(CI)或容器化环境,应谨慎使用,因为修改系统 Python 可能会导致不可预期的行为。

UV_TOOL_BIN_DIR

指定用于安装工具可执行文件的 "bin" 目录。

UV_TOOL_DIR

指定 uv 存储托管工具的目录。

UV_UNMANAGED_INSTALL

用于 CI 等短暂环境,将 uv 安装到特定路径,同时防止安装程序修改 shell 配置文件或环境变量。

外部定义的变量

uv 还读取以下外部定义的环境变量:

ACTIONS_ID_TOKEN_REQUEST_TOKEN

用于通过 uv publish 进行受信发布。包含 oidc 请求令牌。

ACTIONS_ID_TOKEN_REQUEST_URL

用于通过 uv publish 进行受信发布。包含 oidc 令牌 URL。

ALL_PROXY

用于所有网络请求的通用代理。

BASH_VERSION

用于检测是否使用了 Bash shell。

CLICOLOR_FORCE

用于通过 anstyle 控制颜色。

CONDA_DEFAULT_ENV

用于确定当前激活的 Conda 环境是否为基础环境。

CONDA_PREFIX

用于检测是否激活了 Conda 环境。

FISH_VERSION

用于检测是否使用了 Fish shell。

FORCE_COLOR

强制输出彩色内容,无论终端是否支持。请参阅 force-color.org。

GITHUB_ACTIONS

用于通过 uv publish 进行受信发布。HOME标准的 HOME 环境变量。

HTTPS_PROXY

HTTPS 请求的代理。

HTTP_PROXY

HTTP 请求的代理。

HTTP_TIMEOUT

HTTP 请求的超时时间(以秒为单位)。等同于 UV_HTTP_TIMEOUT。

INSTALLER_NO_MODIFY_PATH

在使用独立安装程序和 self update 功能安装 uv 时,避免修改 PATH 环境变量。

JPY_SESSION_NAME

用于检测是否在 Jupyter notebook 中运行。

KSH_VERSION

用于检测是否使用了 Ksh shell。

LOCALAPPDATA

用于查找 Microsoft Store 中的 Python 安装。

MACOSX_DEPLOYMENT_TARGET

与 --python-platform macos 及相关变体一起使用,用于设置部署目标(即,最低支持的 macOS 版本)。

NETRC

用于设置 .netrc 文件的位置。

NO_COLOR

禁用彩色输出(优先于 FORCE_COLOR)。

NU_VERSION

用于检测 NuShell 的使用。

PAGER

标准的 PAGER posix 环境变量。由 uv 用于配置适当的分页器。

PATH

标准的 PATH 环境变量。

PROMPT

用于检测是否使用了 Windows 命令提示符(与 PowerShell 相对)。

PWD

标准的 PWD posix 环境变量。

PYC_INVALIDATION_MODE

在使用 --compile 时运行时的验证模式。

PYTHONPATH

添加目录到 Python 模块搜索路径(例如,PYTHONPATH=/path/to/modules)。

RUST_LOG

如果设置,uv 将使用此值作为其 --verbose 输出的日志级别。接受与 tracing_subscriber crate 兼容的任何过滤器。 例如: * RUST_LOG=uv=debug 相当于在命令行中添加 --verbose * RUST_LOG=trace 将启用追踪级别的日志记录。请参阅 tracing 文档 了解更多信息。

SHELL

标准的 SHELL posix 环境变量。

SSL_CERT_FILE

用于 SSL 连接的自定义证书捆绑文件路径。

SSL_CLIENT_CERT

如果设置,uv 将使用此文件进行 mTLS 认证。 该文件应包含证书和私钥,格式为 PEM。

SYSTEMDRIVE

Windows 系统中系统级配置目录的路径。

TRACING_DURATIONS_FILE

用于通过 tracing-durations-export 功能创建追踪持续时间文件。

VIRTUAL_ENV

用于检测已激活的虚拟环境。

VIRTUAL_ENV_DISABLE_PROMPT

如果在虚拟环境激活之前将其设置为 1,则虚拟环境的名称将不会加到终端提示符前。

XDG_BIN_HOME

可执行文件安装目录的路径。

XDG_CACHE_HOME

Unix 系统上的缓存目录路径。

XDG_CONFIG_DIRS

Unix 系统上系统级配置目录的路径。

XDG_CONFIG_HOME

Unix 系统上用户级配置目录的路径。

XDG_DATA_HOME

用于存储管理的 Python 安装和工具的目录路径。

ZDOTDIR

用于确定在使用 Zsh 时应使用哪个 .zshenv 文件。

ZSH_VERSION

用于检测 Zsh shell 的使用情况。


持续学习、适应变化、记录点滴、复盘反思、成长进步。

Tags:

最近发表
标签列表