Ruff, uv и Ty: современный стек для быстрой Python-разработки
Ruff, uv и Ty — это три инструмента на Rust, которые заменяют традиционные утилиты для Python: линтинг, форматирование, управление зависимостями и проверку типов. Они работают в 10–100 раз быстрее, чем их аналоги, и интегрируются в рабочие процессы без накладных расходов. Ruff объединяет функции Fl…
Ruff, uv и Ty: три инструмента, меняющие подход к Python-разработке
Современная Python-разработка требует не только функциональности, но и согласованности, скорости и минимальных накладных расходов. Традиционные инструменты — pip, Flake8, Black, mypy — давно превратились в тормозящий фактор: они требуют десятков конфигураций, работают медленно и усложняют рабочий процесс.
Ruff, uv и Ty меняют эту ситуацию. Все три инструмента написаны на Rust и оптимизированы для максимальной производительности. Вместо россыпи утилит вы получаете три решения, которые покрывают основные задачи: линтинг, форматирование, управление зависимостями и проверку типов. Их совместное использование позволяет сосредоточиться на коде, а не на инструментах.
Ruff: молниеносный анализатор и форматировщик
Ruff — высокопроизводительный линтер и форматировщик Python-кода, полностью написанный на Rust. Он объединяет функции Flake8, isort, Black и pyupgrade, заменяя сразу несколько утилит одним инструментом, который работает в 10–100 раз быстрее традиционных аналогов.
Даже на крупных проектах Ruff выполняет анализ за миллисекунды. Например, проверка проекта среднего размера с помощью Flake8 занимает 3,25 секунды, тогда как Ruff справляется за 0,14 секунды — в 23 раза быстрее. В стандартной поставке доступно более 700 правил: от базовых ошибок PEP 8 до уязвимостей безопасности, неиспользуемых импортов и сложных антипаттернов. При этом инструмент не только диагностирует проблемы, но и исправляет их автоматически. Команда ruff check --fix удаляет неиспользуемый код, сортирует импорты и оптимизирует выражения без ручного вмешательства.
Форматирование кода — ещё одна сильная сторона Ruff. Команда ruff format заменяет Black, но работает в десятки раз быстрее. Так, форматирование 42 файлов с помощью Black занимает 2,47 секунды, тогда как Ruff справляется за 0,3 секунды. Инструмент легко интегрируется в редакторы (VS Code, PyCharm) и CI/CD-системы (GitHub Actions, pre-commit), а конфигурация через pyproject.toml позволяет адаптировать правила под нужды проекта.
pip install ruff
ruff check . # Проверка кода
ruff check --fix . # Автоматическое исправление проблем
ruff format . # Форматирование кода
[tool.ruff]
line-length = 88
target-version = "py311"
select = ["E", "F", "I", "N", "UP", "B", "A"]
ignore = ["E501"]
fixable = ["ALL"]
src = ["src", "tests"]
uv: быстрый менеджер пакетов и окружений
uv — современный менеджер пакетов и виртуальных окружений для Python, также написанный на Rust. Он позиционируется как полная замена pip, venv, pip-tools, Poetry и даже pyenv, сохраняя при этом совместимость с существующими рабочими процессами. Главное преимущество — скорость: благодаря параллельной установке и оптимизированному Rust-коду пакеты устанавливаются в 5–10 раз быстрее, чем с pip.
Например, установка Django с зависимостями с помощью pip занимает 9,34 секунды, тогда как uv справляется за 1,87 секунды. Инструмент упрощает управление виртуальными окружениями, позволяя создавать и использовать их одной командой:
uv venv .venv && uv pip install -r requirements.txt --venv .venv
uv поддерживает запуск Python-скриптов с зависимостями без предварительной настройки окружения:
uv run --python 3.12 --no-project python -c "print('hello world')"
Инструмент совместим с requirements.txt и pyproject.toml, что позволяет легко мигрировать с существующих решений. Кроме того, uv поддерживает динамическое добавление зависимостей к скриптам:
uv add --script example.py 'requests<3' 'rich'
curl -Ls https://astral.sh/uv/install.sh | sh
uv init my_project
uv pip install requests pandas
uv run pytest
Ty: моментальная проверка типов
Ty — новый типчекер от создателей Ruff и uv, спроектированный для мгновенной обратной связи при работе с аннотациями типов. В отличие от традиционных инструментов вроде mypy или Pyright, Ty интегрируется в рабочий процесс как часть редактора, а не отдельный этап сборки. Проверка типов выполняется в реальном времени, сразу после изменения кода.
Например, в проектах с использованием PyTorch пересчёт диагностик занимает менее 5 миллисекунд. Ty анализирует только изменённые части кода, что минимизирует накладные расходы. Инструмент интегрируется с редакторами через Language Server Protocol (LSP), предоставляя подсказки и ошибки типов прямо в IDE (VS Code, PyCharm и др.). Он совместим с Ruff и uv, дополняя их функциональность и обеспечивая полный цикл проверки кода.
def calculate_total(prices: list[float], tax_rate: float) -> float:
subtotal = sum(prices)
return subtotal * (1 + tax_rate)
result: int = calculate_total([10.0, 20.0], 0.1) # Ошибка: несовместимые типы
Почему эти инструменты стоит использовать вместе
Ruff, uv и Ty образуют современный стек для Python-разработки, который решает ключевые проблемы экосистемы. Все три инструмента написаны на Rust и оптимизированы для максимальной производительности, устраняя узкие места в рабочем процессе.
Вместо десятков разрозненных утилит вы получаете три инструмента, покрывающих основные задачи: линтинг, форматирование, управление зависимостями и проверку типов. Они легко интегрируются в существующие рабочие процессы, редакторы и CI/CD-системы. Их совместное использование гарантирует чистый, согласованный и безопасный код с минимальными затратами времени.
Пример типичного рабочего процесса:
uv venv .venv
source .venv/bin/activate
uv pip install -r requirements.txt
ruff check . --fix
ruff format .
ty check .
uv run pytest
Эти инструменты особенно ценны для командной разработки, где важны согласованность, скорость и воспроизводимость. Их использование позволяет сосредоточиться на создании функциональности, а не на борьбе с инструментами.