uv: руководство для начинающих -- инструмент управления пакетами и окружением Python

В разработке на Python управление пакетами и изоляция окружений — это проблемы, с которыми сталкивается каждый разработчик. Будь то медлительность pip, громоздкость virtualenv или раздутость conda,uvвсё это заставляет разработчиков с нетерпением ждать более эффективного решения.

Что такое uv?

uv — это менеджер пакетов Python и менеджер окружений, разработанный Astral на Rust. Его основная цель — обеспечить производительность в 10-100 раз выше, чем у существующих инструментов, при сохранении простого и интуитивно понятного пользовательского опыта.

uv может заменить такие инструменты, как pip, virtualenv, pip-tools и pyenv, предоставляя универсальные решения для управления зависимостями, создания виртуальных окружений и управления версиями Python.

Преимущества uv

  • Чрезвычайно быстрый: Поскольку он написан на Rust, производительность uv намного превосходит производительность pip и других инструментов управления пакетами, а скорость установки зависимостей можно увеличить в 10-100 раз.
  • Интегрированная функциональность: Он объединяет разрешение зависимостей, установку пакетов, управление окружением и управление версиями Python в одном инструменте, избавляя от необходимости устанавливать и изучать несколько инструментов.
  • Детерминированные сборки: uv генерируетuv.lockфайл, гарантируя, что точно такие же версии зависимостей можно установить в любом окружении, избегая проблемы «работает на моей машине».
  • Совместимость с существующими инструментами: uv может обрабатыватьrequirements.txtиpyproject.toml, и может бесшовно заменить pip в существующих рабочих процессах.

Установка uv

Установка в macOS

Рекомендуется устанавливать через Homebrew:

brew install uv

Или используйте официальный скрипт установки:

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

Установка в Linux

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

Установка в Windows

Использование Winget:

winget install uv

Или используйте официальный установочный скрипт (PowerShell):

irm https://astral.sh/uv/install.ps1 | iex

После установки проверьте, прошла ли она успешно:

uv --version

Вывод похож на следующий, что свидетельствует об успешной установке:

uv 0.8.14 (Homebrew 2025-08-28)

1. Управление версиями Python

uv имеет встроенную функцию управления версиями Python, поэтому нет необходимости устанавливать дополнительные инструменты, такие как pyenv.

Просмотр доступных версий Python:

uv python list

Результат вывода аналогичен следующему:

cpython-3.14.0rc2-macos-aarch64-none                 <download available>
cpython-3.13.7-macos-aarch64-none                    <download available>
cpython-3.12.11-macos-aarch64-none                   <download available>
cpython-3.11.13-macos-aarch64-none                   <download available>
cpython-3.10.18-macos-aarch64-none                   <download available>
cpython-3.9.6-macos-aarch64-none                     /usr/bin/python3
pypy-3.11.13-macos-aarch64-none                      <download available>

Установка конкретной версии Python:

# 安装最新的 Python 3.12
uv python install 3.12

# 安装特定版本
uv python install 3.11.6

# 安装 PyPy 版本
uv python install pypy3.10

Установка глобальной версии Python по умолчанию:

uv python default 3.12

Зафиксируйте версию Python для текущего проекта (будет создан.python-versionфайл):

uv python pin 3.12

После выполнения этой команды в текущем каталоге проекта будет создан файл .python-version. При открытии он отображает содержимое с номером версии:

3.12

2. Управление виртуальными средами

Создание виртуального окружения:

# 在当前目录创建名为 .venv 的虚拟环境(使用系统默认 Python)
uv venv

# 使用指定 Python 版本创建虚拟环境
uv venv --python 3.12

Активируйте виртуальную среду:

# macOS / Linux
source .venv/bin/activate

# Windows(PowerShell)
.venv\Scripts\activate

Выйдите из виртуальной среды:

deactivate

В повседневной разработке вы можете использоватьuv runчтобы напрямую запускать скрипты без ручной активации виртуальной среды.


3. Управление пакетами (режим совместимости с pip)

uv предоставляет интерфейс командной строки, полностью совместимый с pip, который может напрямую заменять команды pip в существующих рабочих процессах:

Установка пакетов:

# 安装最新版本
uv pip install requests

# 安装特定版本
uv pip install requests==2.31.0

# 从 requirements.txt 批量安装
uv pip install -r requirements.txt

Обновление пакетов:

uv pip install --upgrade requests

Удаление пакетов:

uv pip uninstall requests

Просмотр установленных пакетов:

uv pip list

Экспорт зависимостей текущей среды в requirements.txt:

uv pip freeze > requirements.txt

4. Управление проектом (рекомендуемый подход)

uv поддерживаетpyproject.toml-ориентированный современный подход к управлению проектами, который рекомендуется больше, чем режим pip, особенно подходит для командной работы и развертывания в нескольких средах.

Инициализация проекта

uv init my_project
cd my_project

Это создаст следующую базовую структуру проекта:

my_project/
├── pyproject.toml    # 项目配置和依赖声明
├── .python-version   # 固定 Python 版本
├── README.md
└── main.py

Добавление и удаление зависимостей

В режиме проекта рекомендуется использоватьuv addиuv removeдля управления зависимостями; они будут автоматически обновлятьсяpyproject.tomlиuv.lock:

# 添加生产依赖
uv add requests

# 添加指定版本的依赖
uv add "requests>=2.31.0"

# 添加开发依赖(只在开发环境使用,如测试框架)
uv add --dev pytest ruff

# 移除依赖
uv remove requests

Установка всех зависимостей проекта (uv sync)

После клонирования проекта или обновленияpyproject.toml, выполните следующую команду, чтобы установить все зависимости одним кликом:

uv sync

Пояснение uv sync:Аналогичноpip install -r requirements.txt, он, основываясь наpyproject.tomlиuv.lockустановит все зависимости, гарантируя, что окружение точно такое же, как у других разработчиков. Если установка медленная, вы можете, вpyproject.tomlнастройте внутренний зеркальный источник:

[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"

Генерация/обновление файлов блокировки

uv lock

Эта команда проанализируетpyproject.tomlзависимости и сгенерирует (или обновит) файлuv.lockфайл.uv.lockЕго следует закоммитить в репозиторий системы контроля версий, чтобы все участники команды использовали в точности одинаковые версии зависимостей.


5. Запуск скриптов (uv run)

uv run— очень практичная команда в uv, позволяющая вам, без ручной активации виртуального окружения,напрямую запускать скрипты или команды. uv автоматически найдёт и использует нужное окружение:

# 直接运行 Python 脚本
uv run main.py

# 运行项目中的测试
uv run pytest

# 运行任意命令(在虚拟环境的上下文中执行)
uv run python -c "import requests; print(requests.__version__)"

Использованиеuv runпо сравнению с ручной активацией окружения имеет следующие преимущества: вы не будете случайно использовать неправильную версию Python и не забудете активировать окружение, из-за чего пакеты могут не найтись. Особенно подходит для использования в CI/CD и автоматизации скриптов.


Переход на uv

Если вы используете другие инструменты, вы можете перейти на uv следующими способами:

Переход с pip + virtualenv:

# 创建并激活虚拟环境
uv venv
source .venv/bin/activate

# 安装原有依赖
uv pip install -r requirements.txt

Переход с pip-tools:

# 编译依赖(替代 pip-compile)
uv pip compile requirements.in -o requirements.txt

# 同步环境(替代 pip-sync)
uv pip sync requirements.txt

Миграция с poetry или pdm:

# 直接使用现有的 pyproject.toml
uv sync
Другие расширения