Ruff, uv и Ty: современный стек для быстрой Python-разработки

Ruff, uv и Ty — это три инструмента на Rust, которые заменяют традиционные утилиты для Python: линтинг, форматирование, управление зависимостями и проверку типов. Они работают в 10–100 раз быстрее, чем их аналоги, и интегрируются в рабочие процессы без накладных расходов. Ruff объединяет функции Fl…

Ruff, uv и Ty: современный стек для быстрой Python-разработки

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

Эти инструменты особенно ценны для командной разработки, где важны согласованность, скорость и воспроизводимость. Их использование позволяет сосредоточиться на создании функциональности, а не на борьбе с инструментами.

Read more

Drex: модель, которая решает, а не говорит

Drex: модель, которая решает, а не говорит

В индустрии, где главным продуктом стал текст, появляется модель, которая отказывается от текста как такового. Drex принимает на вход факты и за один проход выдаёт распределение вероятностей по всем возможным вариантам. Никаких рассуждений вслух, никаких промежуточных выкладок — только числа.

Воронка Карпати: почему экспонента ИИ проходит мимо 99,8% человечества

Воронка Карпати: почему экспонента ИИ проходит мимо 99,8% человечества

Шесть миллиардов человек никогда не взаимодействовали с языковыми моделями. Еще один-два миллиарда хотя бы раз написали запрос в бесплатный ChatGPT. Около двадцати миллионов используют агентов в работе. И примерно пять тысяч человек имеют доступ к внутренним системам OpenAI. Андрей Карпати объясняе…

Клоны Adobe на Rust: код перестал быть барьером

Проект ArtCraft выпустил семь клонов Adobe на Rust, управляемых через JSON и MCP. PhotoCraft сохраняет рендер 307 из 309 PSD-файлов, но автор признаёт раннюю альфу. Главный вывод: код больше не защищает проприетарное ПО — защита смещается в интерфейс и экосистему.

Cloudflare строит собственный центр сертификации: зачем нужен свой CA и при чём тут постквантовая криптография

Cloudflare строит собственный центр сертификации: зачем нужен свой CA и при чём тут постквантовая криптография

Cloudflare объявила о создании собственного публичного удостоверяющего центра. Компания покупает корень GlobalSign, требует автоматического продления сертификатов и готовит переход на Merkle Tree Certificates. Разбираем, как это изменит WebPKI и что делать владельцам сайтов.