DEVLOG

python / tooling / build systems

Дистрибуция Python: PyInstaller vs Nuitka vs shiv

2025-10-15 · 10 min read

Три подхода к тому, чтобы отдать юзеру «просто файл, который работает».

PyInstaller

Пакетит CPython + байткод + зависимости в один файл или каталог. Не компилирует.

pip install pyinstaller
pyinstaller --onefile --name app main.py

Nuitka

Компилирует в C → нативный бинарник. Подробнее в статье про Nuitka + GHA.

shiv (zipapp)

Пакетит зависимости + код в исполняемый .zip с shebang #!/usr/bin/env python3. Нужен Python на целевой.

pip install shiv
shiv -c app -o app.zip -e main.py .
chmod +x app.zip
./app.zip

Когда что

СценарийВыбор
CLI для юзеров без PythonNuitka (onefile) или PyInstaller
Внутренний инструмент, Python естьshiv
Нужна защита кодаNuitka
Быстрая итерация, CIshiv или PyInstaller
GUI (Tkinter/Qt)PyInstaller (лучшая поддержка)

Гибрид

Частый паттерн: shiv для dev/CI + Nuitka для релизного бинарника. В workflow собираешь оба, shiv — для smoke-тестов, Nuitka — для дистрибуции.

← back to posts