Наконец-то распробовал uv. Тот самый "убийца pip" на Расте от команды Astral. Удобненько, ооочень шустро работает, с зависимостями не косячит.
Всё наше добро вписываем в pyproject.toml, делаем
uv sync для установки, 5 секунд ждём и готово! Естественно, появится lock-файл, в котором будут зафиксированы все зависимости.
Очень понравилось, как устроены "группы зависимостей". В одном файле prod/dev/test зависимости, только разнесённые по группам. На фоне пипа с миллионом файлов requirements.txt/requirements.test.txt и т.д - очень вкусно.
Но и это не всё. Хотя избавиться от тормознутого pip'а это уже удовольствие. Есть еще кое-что: он умеет скачивать и устанавливать нужные версии Python. И переключаться между ними можно одной простой командой.
## Шпаргалка по командам
-
uv init — инициализировать новый проект с pyproject.toml
-
uv add <package> — добавить пакет в зависимости и синхронизировать окружение
-
uv remove <package> — удалить пакет из проекта
-
uv sync — синхронизировать venv с текущим lock-файлом
-
uv sync --all-groups — синхронизировать все группы зависимостей
-
uv sync --only-group dev — синхронизировать только зависимости для dev-окружения
-
uv sync --no-dev — синхронизировать всё, кроме dev-окружения
-
uv lock — обновить только uv.lock без установки пакетов
-
uv run <script.py> — запустить скрипт внутри изолированного окружения
-
uv python install 3.13 — скачать и установить конкретную версию Python в систему
-
uv python list — посмотреть список всех доступных и установленных версий Python
version = "0.1.0"
dependencies = [
"fastapi == 0.115.0",
"sqlalchemy >= 2.0.25",
"uvicorn[standard] >= 0.27.0",
]
[dependency-groups]
dev = [
"ruff ~= 0.2.0",
"pytest >= 8.0.0, < 9.0.0",
]
Еще из плюсов:
- Нормальный, человеческий (
наконец-то!) мать его кэш! Один раз скачал библиотеку и всё.
- Читаемый лок-файл uv.lock. Приемлемо выглядит в диффах.
Хочется верить, что инструмент повторит судьбу ruff, который в итоге затащили вообще везде и всюду.