Курс «Администрирование ViPNet-сетей»

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

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

Недавно нашел простую и очень мощную библиотеку на 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

Похожие материалы:


PyQt Designer
Автоматическое растяжение виджетов в PyQt Designer
Автор: Алексей Черемных30 ноября 2020

Пишу данную статью, так как сам столкнулся с данным вопросом и нормального ответа не смог найти. Вроде и ответов много, …

LiveWires ModuleNotFoundError: No module named 'beginners'
LiveWires ModuleNotFoundError: No module named 'beginners'
Автор: Алексей Черемных30 ноября 2020

Начинающие программисты, которые читают книгу Майкла Доусона могут встретить ошибку:

ModuleNotFoundError: No module named 'beginners'

Она связана с пакетом livewires. Если …

Deprecation Warning: an integer is required (got type float)
Deprecation Warning: an integer is required (got type float)
Автор: Алексей Черемных30 ноября 2020

При разработке программы в python 3 встретилась ошибка:

D:\LicenseChecker\1.6\main.pyw:45: DeprecationWarning: an integer is required (got type float).  
Implicit conversion to …
py-скрипт
Перенос комментариев из Joomla в Django
Автор: Алексей Черемных3 ноября 2021

Раньше один из моих сайтов был на Joomla 3, но я его переписал на Django. Успешно перенёс все материалы, единственное, …

Django UnicodeDecodeError: utf-8 codec can't decode byte
Django UnicodeDecodeError: utf-8 codec can't decode byte
Автор: Алексей Черемных29 января 2023

Столкнулся с проблемой при запуске отладочного сервера на виртуальной машине. Сначала я подумал, что проблема с версией Python, так как …

Классы для многопоточности
Как понять, что ты стал серьезным программистом?
Автор: Алексей Черемных10 июля 2022

Любой программист рано или поздно задаётся вопросом "могу ли я себя считать серьезным программистом? или я всё еще программист уровня …

Все теги:

Подписка на рассылку свежих статей