The post has been translated automatically. Original language: Russian
I switched to uv in a real production project, a Django service with Docker, gunicorn, and PostgreSQL. I'll tell you what it is, why the tool blew up the community, and whether it makes sense to migrate right now.
What is uv and where does it come from?
The Astral team — the same guys who made the ruff linter — released uv in 2024. The tool is written in Rust and is positioned as a replacement for several familiar utilities at once.: pip, pip-tools, virtualenv, pyenv and even Poetry.
The main argument is speed. In benchmarks, uv installs dependencies 10-100 times faster than pip due to parallel dependency resolution and global package cache. As of April 2026, the current version is 0.11.9.
What uv can do
Instead of separate utilities, there is one command. Here are the basic operations:
Initialization of the project
# Create a new project
uv init my-django-app
cd my-django-app
# Structure after initialization:
# ├── .python-version ← Python version
# ├── pyproject.toml ← dependencies
# └── uv.lock ← lock fileDependency Management
# Add package (creates venv automatically)
uv add django gunicorn psycopg2-binary
# Dev dependencies
uv add --dev pytest black
# Run without manually activating venv
uv run python manage.py runserverPython Version Control
# Install the required version — pyenv no longer needs
uv python install 3.12 3.13
# The result is almost instant:
# Installed 2 versions in 843msMy experience: uv in Docker assembly
In our Django project on reg.elordasport.kz we use uv starting from the stage of building a Docker image. Here is a simplified Dockerfile:
FROM python:3.12-slim
# We set uv in one line — without pip and venv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
WORKDIR /app
COPY pyproject.toml uv.lock ./
# Syncing dependencies from the lock file
RUN uv sync --frozen --no-dev
COPY . .
CMD ["uv", "run", "gunicorn", "config.wsgi:application"]What gives --frozen: dependencies are set strictly from uv.lock without attempting to update. Ideal for CI/CD and production — complete reproducibility of the build.
UV vs Competitors: A quick comparison
UV is recommended to replace pip + venv + pyenv + Poetry. Rust-speed, lock-file, Docker-friendly. Version 0.11.8 — Production/Stable status.Poetry is a comfortable UX and a good lock file, but slower. In 2026, uv can already do almost all the same things and is incomparably faster.PIP + VENV classics, works everywhere. But there is no lock file out of the box, slow resolver, you need a separate pyenv for Python versions.Conda is not applicable for Data Science with non-Python packages (CUDA, C libraries). It is redundant for a pure Python web.
Migration from requirements.txt — five minutes
If you already have a pip project, the transition takes literally a few commands.:
#1. Initialize uv in an existing
uv init project
# 2. Import existing
uv pip install -r dependencies requirements.txt
#3. That's it — uv.lock is created, pyproject.toml is filled
# Can be deleted requirements.txt or leave it for compatibilityA caveat with Poetry: if you migrate from Poetry, you will need a separate poetry-to-uv tool to convert pyproject.toml — a simple uv init will not cope with the Poetry format.
When uv is not needed
- Small scripts without dependencies — python script.py And that's how it works.
- Data Science with conda packages (CUDA, etc.) — conda remains indispensable
- The project is tightly tied to Poetry plugins - migration will be non—trivial
Result
I think it will be too lazy to transfer old projects to uv, although there is a migration. I definitely recommend starting new ones with uv. For me, it has already become the standard for my Python projects. Active development is underway (releases every 1-2 weeks), support from Astral. If you are starting a new project, take uv right away. They say that migration from pip/venv takes 10 minutes, but I haven't tried it yet. Has anyone crossed over?
Я перешёл на uv в реальном продакшн-проекте — Django-сервис с Docker, gunicorn и PostgreSQL. Расскажу что это, почему инструмент взорвал сообщество и есть ли смысл мигрировать прямо сейчас.
Что такое uv и откуда он взялся
Команда Astral — те же ребята, что сделали линтер ruff — выпустила uv в 2024 году. Инструмент написан на Rust и позиционируется как замена сразу нескольким привычным утилитам: pip, pip-tools, virtualenv, pyenv и даже Poetry.
Главный аргумент — скорость. В бенчмарках uv устанавливает зависимости в 10–100 раз быстрее pip за счёт параллельного разрешения зависимостей и глобального кэша пакетов. На апрель 2026 года актуальная версия — 0.11.9.
Что uv умеет делать
Вместо отдельных утилит — одна команда. Вот основные операции:
Инициализация проекта
# Создать новый проект
uv init my-django-app
cd my-django-app
# Структура после инициализации:
# ├── .python-version ← версия Python
# ├── pyproject.toml ← зависимости
# └── uv.lock ← lock-файлУправление зависимостями
# Добавить пакет (создаёт venv автоматически)
uv add django gunicorn psycopg2-binary
# Dev-зависимости
uv add --dev pytest black
# Запустить без ручной активации venv
uv run python manage.py runserverУправление версиями Python
# Установить нужную версию — pyenv больше не нужен
uv python install 3.12 3.13
# Результат почти мгновенный:
# Installed 2 versions in 843msМой опыт: uv в Docker-сборке
В нашем Django-проекте на reg.elordasport.kz мы используем uv начиная со стадии сборки Docker-образа. Вот упрощённый Dockerfile:
FROM python:3.12-slim
# Устанавливаем uv одной строкой — без pip и venv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
WORKDIR /app
COPY pyproject.toml uv.lock ./
# Синк зависимостей из lock-файла
RUN uv sync --frozen --no-dev
COPY . .
CMD ["uv", "run", "gunicorn", "config.wsgi:application"]Что даёт --frozen: зависимости ставятся строго из uv.lock без попытки обновить. Идеально для CI/CD и продакшна — полная воспроизводимость сборки.
uv vs конкуренты: быстрое сравнение
uvрекомендуюЗаменяет pip + venv + pyenv + Poetry. Rust-скорость, lock-файл, Docker-friendly. Версия 0.11.8 — статус Production/Stable.PoetryУдобный UX и хороший lock-файл, но медленнее. uv в 2026 году уже умеет почти всё то же самое и несравнимо быстрее.pip + venvКлассика, везде работает. Но нет lock-файла из коробки, медленный resolver, нужен отдельный pyenv для Python-версий.condaНезаменим для Data Science с non-Python пакетами (CUDA, C-библиотеки). Для чистого Python-веба — избыточен.
Миграция с requirements.txt — пять минут
Если у вас уже есть проект на pip, переход занимает буквально несколько команд:
# 1. Инициализируем uv в существующем проекте
uv init
# 2. Импортируем существующие зависимости
uv pip install -r requirements.txt
# 3. Всё — uv.lock создан, pyproject.toml заполнен
# Можно удалить requirements.txt или оставить для совместимостиНюанс с Poetry: если мигрируете с Poetry, понадобится отдельный инструмент poetry-to-uv для конвертации pyproject.toml — простой uv init не справится с Poetry-форматом.
Когда uv не нужен
- Небольшие скрипты без зависимостей — python script.py и так работает
- Data Science с conda-пакетами (CUDA и т.п.) — conda остаётся незаменимой
- Проект жёстко завязан на Poetry-плагины — миграция будет нетривиальной
Итог
Старые проекты переносить на uv думаю будет лень, хоть и есть миграция. Новые я точно рекомендую начинать с uv. Для меня он уже стал стандартом для моих Python-проектов. Ведется активная разработка (релизы каждые 1–2 недели), поддержка от Astral. Если начинаете новый проект — берите uv сразу. Пишут что миграция с pip/venv занимает 10 минут, но я пока не пробовал. Кто-то переходил?