Результат преобразования при помощи nuitka
Результат преобразования при помощи nuitka
Категория: Разработка Теги: Python Опубликовано: 16 ноября 2021

Скомпилировать python-код в exe файл на языке C

Недавно нашел простую и очень мощную библиотеку на Python для компиляции кода в исполняемый файл на языке C. Сама фраза для понимания может показаться сложной, но сейчас попробую объяснить и показать простейший пример, который подойдёт большинству разработчиков.

Библиотека называется nuitka и установить её можно при помощи pip install nuitka.

Важнейшим замечанием является лицензия, и она свободная - Nuitka распространяется под лицензией Apache.

Nuitka - хорошая замена интерпретатору Python. Она компилирует каждую языковую конструкцию во всех соответствующих версиях CPython и даже в нерелевантных версиях, таких как 2.6 и 3.3. Переводит Python в программу C, которая затем связывается с libpython для выполнения точно так же, как CPython.

Nuitka уже немного быстрее, чем CPython. По заявлению разработчиков, они получают ускорение на 335% в pystone (Nuitka версии 0.6.17 с Debian Python 2.7).

Теперь к примеру компиляции в исполняемый файл с преобразованием в C:

python -m nuitka --standalone --plugin-enable=pyqt5 --windows-uac-admin --windows-disable-console --windows-icon-from-ico=data/LicenseChecker.ico --include-data-dir=data=data main.pyw

без флага --standalone будут использоваться зависимости из установленного Python. Иными словами, если скопировать exe файл, то без установленного Python с нужными библиотеками запускаться не будет, поэтому этот параметр нужен обязательно.

--plugin-enable=pyqt5 нужен для тех, кто использует pyqt5, так как без него библиотека может быть не включена, или включена частично. Собственно, узнал я об этом из сообщений, которые nuitka выдаёт при компиляции, поэтому читайте внимательно и переводите красный текст.

--windows-uac-admin это требование прав администратора для запуска программы. В моём случае они нужны, но если вашей программы в них нет нужны, то и включать не нужно, так больше доверия будет, если программа неизвестна.

--windows-disable-console данный параметр отключает запуск командной строки при открытии исполняемого файла.

--windows-icon-from-ico=data/LicenseChecker.ico самое интересное - иконка для исполняемого файла.

--include-data-dir=data=data включить папку data в конечную папку с приложением и назвать её data.

ну а main.pyw в моём примере, это название вашего скрипта, который вы хотите скомпилировать.

Есть еще параметр --onefile если нужно собрать всё в один файл. Если собирать в один файл, то для сжатия исполняемого файла может пригодиться pip install zstandard - сжатие с 33 мегабайт до 11 в моём случае, но могут быть ошибки, поэтому сразу проверяйте работоспособность.

Также --include-data-file=/path/to/files/*.txt=folder_name/, но использовать его для *.* не стоит - выдаёт ошибку.

Также напишу пару параметров, которые нашел в хэлпе:

--windows-product-name=WINDOWS_PRODUCT_NAME

--windows-company-name=WINDOWS_COMPANY_NAME

--windows-file-version=WINDOWS_FILE_VERSION

--windows-product-version=WINDOWS_PRODUCT_VERSION

--windows-file-description=WINDOWS_FILE_DESCRIPTION

Алексей Черемных
4136