| name | uv-package-manager |
| description | Управление Python-зависимостями через UV package manager. Используй когда: uv, uv sync, uv add, uv run, uv lock, uv pip, pyproject.toml, dependency-groups, optional-dependencies, workspace, монорепозиторий, monorepo, requirements.txt, pip compile, виртуальное окружение Python, venv, установка пакетов.
|
UV Package Manager
Обзор
UV — современный package manager для Python от Astral (авторы Ruff). Замена pip, pip-tools, poetry, pipenv. Написан на Rust, работает в 10-100x быстрее pip.
Ключевые концепции:
pyproject.toml — источник истины для зависимостей
uv.lock — lock-файл с точными версиями (рекомендуется вместо requirements.txt)
.venv — виртуальное окружение (создаётся автоматически)
Базовые команды
Инициализация проекта
uv init myproject
cd myproject
uv init
uv init --lib
uv init --package packages/mylib
Управление зависимостями
uv add fastapi
uv add "httpx>=0.25"
uv add --dev pytest ruff mypy
uv add --group docs sphinx mkdocs
uv add --optional postgres asyncpg
uv remove httpx
uv lock --upgrade-package fastapi
Синхронизация окружения
uv sync
uv sync --no-dev
uv sync --group docs
uv sync --all-groups
uv sync --only-group test
uv sync --all-packages
uv sync --package backend
Запуск команд
uv run python script.py
uv run pytest
uv run ruff check .
uv run --package backend uvicorn app:main --reload
uv run --no-dev python script.py
Lock-файл
uv lock
uv lock --upgrade
uv lock --upgrade-package requests
uv lock --check
Dependency Groups (PEP 735)
Когда что использовать
| Тип | Публикуется в PyPI | Назначение |
|---|
[project.dependencies] | Да | Основные зависимости пакета |
[project.optional-dependencies] | Да | Опциональные фичи для пользователей |
[dependency-groups] | Нет | Dev-инструменты (test, lint, docs) |
Синтаксис в pyproject.toml
[project]
dependencies = [
"fastapi>=0.100",
"pydantic>=2.0",
]
[project.optional-dependencies]
postgres = ["asyncpg>=0.29"]
redis = ["redis>=5.0"]
[dependency-groups]
test = [
"pytest>=8.0",
"pytest-cov",
"pytest-asyncio",
]
lint = [
"ruff>=0.4",
"mypy>=1.10",
]
docs = [
"sphinx>=7.0",
"mkdocs",
]
dev = [
{include-group = "test"},
{include-group = "lint"},
"ipython",
]
Команды для групп
uv add --dev pytest
uv add --group lint ruff
uv add --optional api httpx
uv sync
uv sync --group docs
uv sync --all-groups
uv sync --only-group test
uv sync --no-dev
Настройка default-groups
[tool.uv]
default-groups = ["dev"]
Workspaces (Монорепозитории)
Конфигурация
Корневой pyproject.toml:
[project]
name = "my-monorepo"
version = "0.1.0"
requires-python = ">=3.12"
[tool.uv.workspace]
members = [
"backend",
"bot",
"packages/*",
]
exclude = ["packages/deprecated"]
[dependency-groups]
dev = []
experiments = ["jupyterlab", "pandas"]
Пакет в workspace:
[project]
name = "backend"
version = "0.1.0"
dependencies = [
"shared-lib",
"fastapi>=0.100",
]
[tool.uv.sources]
shared-lib = { workspace = true }
[dependency-groups]
dev = ["pytest", "ruff", "mypy"]
Команды для workspace
uv sync --all-packages
uv sync --package backend
uv run --package backend uvicorn app:main --reload
uv run --package bot python -m bot.main
uv build --package backend
uv add --package backend httpx
Типичная структура
my-monorepo/
├── pyproject.toml # Workspace config
├── uv.lock # Единый lock-файл
├── .python-version
│
├── packages/
│ ├── core/
│ │ ├── pyproject.toml
│ │ └── src/core/
│ └── utils/
│ ├── pyproject.toml
│ └── src/utils/
│
├── services/
│ ├── backend/
│ │ ├── pyproject.toml
│ │ └── src/backend/
│ └── worker/
│ ├── pyproject.toml
│ └── src/worker/
│
└── Makefile
Docker для workspace
FROM python:3.13-slim
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
WORKDIR /app
# Сначала только файлы конфигурации (кэширование)
COPY pyproject.toml uv.lock ./
COPY backend/pyproject.toml backend/
# Установить зависимости без проекта
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --package backend --no-install-project --frozen
# Затем код
COPY backend/src backend/src
# Установить проект
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --package backend --frozen
CMD ["uv", "run", "--package", "backend", "uvicorn", "backend.main:app"]
Работа с requirements.txt
Когда использовать
- uv.lock — рекомендуется для всех проектов с UV
- requirements.txt — совместимость с системами без UV (CI, Docker)
Генерация из pyproject.toml
uv pip compile pyproject.toml -o requirements.txt
uv pip compile pyproject.toml --extra dev -o requirements-dev.txt
uv pip compile pyproject.toml --group test -o requirements-test.txt
uv pip compile pyproject.toml --generate-hashes -o requirements.txt
uv pip compile pyproject.toml --universal -o requirements.txt
Экспорт из uv.lock
uv export --format requirements.txt -o requirements.txt
uv export --format requirements.txt --no-dev -o requirements.txt
uv export --format requirements.txt --package backend -o requirements.txt
Установка из requirements.txt
uv pip install -r requirements.txt
uv pip sync requirements.txt
pip-совместимый интерфейс
uv pip install fastapi
uv pip install -e .
uv pip freeze > requirements.txt
uv pip list
uv pip show fastapi
uv pip uninstall fastapi
Типичные Makefile команды
.PHONY: install lint format typecheck test run-backend
install: ## Установить все зависимости
uv sync --all-packages
lint: ## Проверить код
uv run ruff check .
lint-fix: ## Автоисправление
uv run ruff check . --fix
format: ## Форматирование
uv run ruff format .
typecheck: ## Проверка типов
uv run mypy backend bot
test: ## Запуск тестов
uv run pytest -v
run-backend: ## Запуск backend
uv run --package backend uvicorn backend.main:app --reload
run-bot: ## Запуск bot
uv run --package bot python -m bot.main
check: format lint typecheck test
@echo "All checks passed!"
Полезные команды
uv pip show fastapi
uv tree
uv tree --package backend
uv cache clean
uv python list
uv python install 3.13
uv python pin 3.13
uv venv
uv venv --python 3.13
uv version
Troubleshooting
Lock-файл устарел
uv lock
uv sync
Конфликт версий
uv lock -v
uv lock --upgrade
Проблемы с кэшем
uv cache clean
uv sync --refresh
Workspace пакет не находится
dependencies = ["shared-lib"]
[tool.uv.sources]
shared-lib = { workspace = true }
Debug режим
uv sync -v
uv sync -vv
UV_LOG=debug uv sync
Миграция
С pip на UV
uv add -r requirements.txt
uv add -r requirements.txt -c requirements.txt
С Poetry на UV
uv sync