Представьте себе: вы запускаете свой старый добрый Python-скрипт, он привычно задумывается на пару секунд, а потом начинает работать. А теперь представьте, что тот же самый скрипт без единого изменения в коде — просто после прогона через одну утилиту — стартует почти мгновенно и работает втрое быстрее. Никакой магии, просто вышел Nuitka 4.0.
22 апреля 2026 года проект, который когда-то начинался как нишевый компилятор, дорос до мажорной версии 4.0. И это не просто «пофиксили баги, добавили пару флагов» — это реально меняет правила игры для тех, кто пишет на Python и хочет, чтобы код летал, а не ползал. По данным официальных тестов, скомпилированные скрипты показывают повышение производительности на 335% в pystone-бенчмарке по сравнению с CPython. Можете представить, что ваш веб-парсер или ML-пайплайн ускоряется втрое без переписывания на Rust.
Если совсем просто: PyInstaller просто пакует ваш скрипт вместе с интерпретатором в один файл — по сути, это архив с «батарейками». А Nuitka переписывает весь Python-код на чистый C и компилирует его в настоящий исполняемый файл. Никакой интерпретации на лету — только скомпилированный бинарник, который в теории может обогнать даже PyPy. И теперь, с версией 4.0, эта теория стала куда ближе к практике. «Раньше я думал, что ускорение от Nuitka довольно скромное… но с версией 4.0 вижу реальный прогресс», — примерно так звучат комментарии на Hacker News, и я с ними согласен.
Что нового в версии 4.0: разбор по косточкам
Совместимость с будущим: Python 3.14 на горизонте
Разработчики Nuitka смотрят в будущее пристальнее, чем я в холодильник ночью. В версии 4.0 добавлена поддержка отложенной обработки аннотаций (PEP 649) и нового синтаксиса типов для обобщённых классов (PEP 695), которые станут стандартом в Python 3.14. Для нас, простых смертных, это означает, что код, который вы пишете сегодня с прицелом на завтрашние фичи, можно будет компилировать уже сейчас. Не нужно ждать, пока весь мир переедет на 3.14 — просто берёте Nuitka 4.0 и компилируете. Красота.
Zig и Clang: свежая кровь в компиляторных бэкендах
Раньше Nuitka использовал в основном GCC или MinGW для компиляции сгенерированного C-кода. Теперь у нас есть выбор, да ещё какой.
Во-первых, экспериментальная поддержка компилятора Zig (zig cc) в качестве бэкенда. Zig — это современный язык системного программирования, который компилирует быстрее GCC, генерирует отличный код и, что особенно приятно, поддерживает кросс-компиляцию из коробки. Хотите собрать бинарник для Linux, сидя на macOS? Zig способен на это. Просто добавьте флаг --zig при запуске Nuitka — и вперёд.
Во-вторых, добавлена поддержка Link-Time Optimization (LTO) для компилятора Clang, включая режим Thin LTO. Что это за зверь такой? LTO позволяет компилятору оптимизировать код не в пределах одного файла, а на этапе сборки, когда видны все объектные файлы сразу. Thin LTO — это облегчённая версия, которая даёт неплохой прирост производительности без превращения сборки в процесс, во время которого можно успеть приготовить борщ. Включается всё парой флагов:
nuitka --standalone --clang --lto=thin my_script.py
Профит по скорости есть, а компиляция не затягивается на полдня — компромисс что надо.
Новые фичи для профилирования и дебага
Тем, кто любит копаться в недрах сборки и отлаживать сложные проекты, Nuitka 4.0 приготовила несколько приятных инструментов:
-
Флаг
--projectпозволяет собирать проект с использованием настроек из файлаpyproject.toml. Теперь конфигурация сборки живёт там же, где и все остальные настройки проекта. Python-way, никаких дополнительных скриптов. -
--devel-profile-compilation— профилирование самого этапа компиляции. Когда Nuitka начинает подтормаживать при сборке большого проекта, этот флаг поможет понять, в каком месте он залипает, и принять меры. -
--debug-self-forking— палочка-выручалочка для отладки форк-бомб. Форк-бомбы — это когда программа начинает клонировать саму себя в бесконечном цикле, и ваш компьютер уходит в астрал. С этим флагом можно отследить такое поведение и вовремя принять меры. -
--qt-debug-plugins— диагностика загрузки Qt-плагинов. Если у вас GUI на PyQt или PySide, и после компиляции плагины не подгружаются — этот флаг покажет, что именно идёт не так.
Декоратор @nuitka_ignore — выборочный контроль
Иногда бывает нужно, чтобы какая-то функция осталась интерпретируемой, а не компилировалась. Например, она генерирует код на лету или вы активно её отлаживаете. В Nuitka 4.0 появился декоратор @nuitka_ignore, который говорит компилятору: «Эту функцию не трогай».
@nuitka_ignoredef my_debug_function(): # Эта функция останется интерпретируемой ...
Удобно, когда нужно точечно исключить проблемный участок, не пересобирая весь проект.
Расширенная поддержка сторонних пакетов
Раньше компиляция проектов с популярными библиотеками вроде pandas, jedi или sentry_sdk могла закончиться фейерверком из ошибок. Теперь Nuitka 4.0 официально поддерживает актуальные версии oracledb, win32ctypes, dask, puremagic, sentry_sdk, jedi, parso и многих других. Это значит, что вы можете взять типичный data science проект с pandas и dask, скомпилировать его в один бинарник и спокойно отдать заказчику. Без танцев с бубном вокруг недостающих зависимостей.
Производительность: 335% — это красивая цифра, но что она значит на самом деле?
Давайте разберёмся честно. Pystone — это синтетический бенчмарк, аналог Dhrystone для C. Он не отражает реальную производительность большинства приложений, а скорее измеряет скорость работы интерпретатора в идеальных условиях. Nuitka демонстрирует 3.35-кратное ускорение в pystone, но в реальных задачах картина другая.
Pystone простыми словами
pystone — это такой синтетический тест, искусственная трасса без ям и светофоров. Он замеряет «чистую» скорость выполнения питоновских операций: создание объектов, вызовы функций, простые циклы, работа со строками и списками. Именно здесь интерпретатор CPython теряет больше всего времени на разбор байт-кода, проверки типов и прочую бюрократию. Nuitka всю эту бюрократию убирает — отсюда и впечатляющие +335% (или 3.35-кратное ускорение). По сути, машина едет по идеальной трассе без единого препятствия. Но реальный проект — это не трасса, а городской трафик. Там есть другие машины, светофоры, пешеходы. Ускорение от Nuitka зависит от того, на чём именно ваш код тратит время. И вот тут начинаются нюансы.
Что Nuitka действительно хорошо ускоряет: общий Python-код, веб-фреймворки, бизнес-логику, скрипты с большим количеством вызовов функций и операций со структурами данных. По сути — почти всё, что не является чистой математикой.
Что Nuitka ускоряет не очень: числодробилки без использования типизации. Если у вас цикл умножения матриц на чистых Python-списках — не ждите чуда. Тут нужны другие инструменты: Numba с JIT-компиляцией для математических функций или Cython с ручной типизацией для максимальной производительности.
Важный момент: если ваша задача I/O-bound (много чтения с диска, сетевых запросов), компиляция не сильно поможет — узким горлышком будет диск или сеть. Но если CPU-bound — прирост будет реальным.
Для сравнения: PyPy с JIT-компиляцией может давать в среднем 7.6-кратное ускорение на синтетических тестах, но не всегда совместим со всеми библиотеками. Cython при ручной типизации может разгонять отдельные участки в десятки раз — но требует переписывания кода. Nuitka же даёт прирост «из коробки», почти без изменений.
Сравнение с PyInstaller и Cython: что выбрать в 2026 году
У каждого инструмента своя ниша:
-
PyInstaller — когда нужно быстро упаковать скрипт в один файл для Windows, чтобы отдать заказчику. Главные минусы: медленный старт (3-8 секунд против 0.5-2 у Nuitka), уязвимость для декомпиляции, больший размер файла. Зато настройка предельно проста:
pyinstaller --onefile my_script.py— и готово. -
Cython — ваш выбор, если нужно выжать максимум из математических вычислений. Требует ручной типизации (файлы .pyx), сложнее в настройке, но даёт наибольший прирост в числодробилках. Подход из разряда: «Я знаю, что делаю, и готов потратить время на оптимизацию».
-
Nuitka — золотая середина. Почти не требует изменений в коде, компилирует всё разом, защищает исходники, генерирует быстрые бинарники. Идеально для десктопных приложений и случаев, когда нужно защитить код от посторонних глаз.
Совет
Делаете десктопное приложение или хотите спрятать исходники — берите Nuitka. Нужен быстрый прототип или одноразовая утилита — PyInstaller. Математическое ядро с жёсткими требованиями по скорости — Cython + NumPy. А если у вас смешанный проект — никто не мешает использовать Nuitka для основной логики и Numba для горячих функций.
Взгляд в будущее: JIT в CPython и при чём тут Nuitka
Пока Nuitka занимается ahead-of-time компиляцией, разработчики CPython тоже не сидят сложа руки. В альфа-сборках Python 3.15 JIT-компилятор уже демонстрирует в среднем ускорение на 11-12% на macOS AArch64 и на 5-6% на x86_64 Linux. Цели на будущее: +5% к версии 3.15 и +10% к 3.16, плюс поддержка free-threading (работы без глобальной блокировки GIL).
Что это значит для нас с вами? Возможно, через пару лет мы увидим комбинацию AOT (Nuitka) + JIT (встроенный в CPython), которая будет давать ещё больший прирост на выходе. Или Nuitka адаптируется и начнёт использовать JIT CPython в скомпилированных бинарниках. В любом случае, соревнование между подходами идёт нам только на пользу.
Практический пример: компилируем за 5 минут
Теория — это хорошо, но давайте попробуем Nuitka 4.0 в деле.
Шаг 1. Установка:
pip install nuitka
Шаг 2. Компиляция в standalone-режиме:
nuitka --standalone --mingw64 my_script.py
Если у вас macOS или Linux, можно использовать Clang вместо MinGW:
nuitka --standalone --clang my_script.py
Шаг 3. Запуск бинарника:
./my_script.dist/my_script.bin# или на Windows:my_script.dist\my_script.exe
Пара советов по ускорению компиляции: используйте флаг --jobs с количеством ядер вашего процессора, чтобы распараллелить сборку. Не включайте LTO без необходимости — оно того стоит, но при отладке только замедляет процесс.
Заключение
Nuitka 4.0 — это не просто очередное обновление в списке «пофиксили баги, добавили пару фич». Это качественный скачок для всех, кто хочет выжать максимум из Python без переписывания кода на других языках. Новые бэкенды (Zig и Clang), поддержка Python 3.14, расширенная совместимость с популярными библиотеками делают этот инструмент готовым к серьёзному продакшену.
Если вы ещё не пробовали Nuitka — сейчас самое время. Возьмите свой проект, прогоните через компилятор и сравните скорость. Результат может вас удивить. Делитесь цифрами в комментариях — интересно, у кого какой прирост получится на реальных задачах. И да, если нашли баг или что-то не компилируется — разработчики Nuitka активно собирают обратную связь на GitHub. Поможем им сделать инструмент ещё лучше.
ссылка на оригинал статьи https://habr.com/ru/articles/1027354/