Пройдите тест, узнайте какой профессии подходите
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы
Введение в компиляцию Python
Python — это интерпретируемый язык программирования, что означает, что код выполняется строка за строкой интерпретатором Python. Однако иногда возникает необходимость компилировать Python-код в исполняемый файл, чтобы упростить его распространение и выполнение на машинах, где Python не установлен. В этой статье мы рассмотрим, как компилировать Python 3-код в исполняемый файл, используя различные инструменты и подходы.

Зачем компилировать Python-код?
Компиляция Python-кода может быть полезной в различных сценариях:
- Упрощение распространения: Компилированные исполняемые файлы можно легко распространять среди пользователей, которые не имеют установленного интерпретатора Python.
- Защита кода: Компиляция может помочь защитить исходный код от несанкционированного доступа и модификации.
- Улучшение производительности: В некоторых случаях компиляция может улучшить производительность приложения, хотя это не всегда гарантировано.
Установка необходимого ПО
Для компиляции Python-кода в исполняемый файл нам потребуется установить несколько инструментов. Основным инструментом для этой задачи является PyInstaller
. Он позволяет преобразовать Python-скрипты в исполняемые файлы для Windows, macOS и Linux. Также рассмотрим альтернативные инструменты, такие как cx_Freeze
и py2exe
.
Установка PyInstaller
Для установки PyInstaller используйте пакетный менеджер pip
. Откройте командную строку или терминал и выполните следующую команду:
После успешной установки PyInstaller будет готов к использованию.
Установка cx_Freeze
cx_Freeze
— это еще один инструмент для компиляции Python-кода. Для его установки выполните следующую команду:
Установка py2exe
py2exe
— это инструмент, предназначенный для создания исполняемых файлов для Windows. Для его установки выполните следующую команду:
Создание простого Python-скрипта
Прежде чем приступить к компиляции, создадим простой Python-скрипт, который мы будем компилировать. Создайте файл с именем hello.py
и добавьте в него следующий код:
Этот скрипт выводит на экран сообщение «Привет, мир!». Теперь мы готовы к его компиляции.
Компиляция Python-скрипта в исполняемый файл с помощью PyInstaller
Для компиляции нашего скрипта hello.py
в исполняемый файл используем PyInstaller. В командной строке или терминале выполните следующую команду:
Параметры команды
--onefile
: Этот параметр указывает PyInstaller создать один исполняемый файл, содержащий весь код и зависимости.hello.py
: Имя нашего Python-скрипта.
После выполнения команды PyInstaller создаст несколько файлов и папок в текущем каталоге. Основные из них:
build/
: Временные файлы, используемые во время компиляции.dist/
: Каталог, содержащий скомпилированный исполняемый файл.hello.spec
: Спецификационный файл, который можно использовать для настройки процесса компиляции.
Исполняемый файл будет находиться в папке dist/
и будет называться hello
(или hello.exe
на Windows).
Компиляция с использованием cx_Freeze
Для компиляции с использованием cx_Freeze
необходимо создать setup-файл. Создайте файл setup.py
со следующим содержимым:
Затем выполните следующую команду для компиляции:
Компиляция с использованием py2exe
Для компиляции с использованием py2exe
также потребуется создать setup-файл. Создайте файл setup.py
со следующим содержимым:
Затем выполните следующую команду для компиляции:
Отладка и распространение скомпилированного приложения
Проверка работоспособности
Перед распространением скомпилированного приложения важно убедиться, что оно работает правильно. Перейдите в папку dist/
и выполните скомпилированный файл:
Вы должны увидеть сообщение «Привет, мир!» в консоли.
Распространение
Теперь, когда у вас есть скомпилированный исполняемый файл, вы можете распространять его другим пользователям. Они смогут запускать ваше приложение без необходимости устанавливать Python и зависимости. Это особенно полезно для конечных пользователей, которые могут не иметь технических навыков для установки и настройки Python.
Устранение проблем
Если при запуске скомпилированного файла возникают ошибки, возможно, необходимо добавить дополнительные параметры при компиляции или включить дополнительные файлы и зависимости. Например, если ваше приложение использует внешние файлы, такие как изображения или базы данных, их нужно явно указать в спецификационном файле или командной строке. Также можно использовать опции --add-data
и --hidden-import
для включения дополнительных ресурсов и модулей.
Заключение
Компиляция Python-кода в исполняемый файл с помощью PyInstaller, cx_Freeze или py2exe — это простой и эффективный способ распространения ваших приложений. Следуя шагам, описанным в этой статье, вы сможете создать исполняемые файлы для различных операционных систем и упростить процесс развертывания ваших Python-приложений. Независимо от выбранного инструмента, важно тщательно тестировать скомпилированные приложения и учитывать все зависимости и ресурсы, чтобы обеспечить их корректную работу на целевых системах.
Читайте также
Предположим, вы разработали приложение или библиотеку на Python и уже готовитесь передать его / её заказчику. И в этот момент возникают вопросы, о которых многие даже не задумываются.
Во-первых, так может оказаться, что вы разработали супер крутой алгоритм, которого ни у кого нет, и показывать его хочется только избранным.
Во-вторых, возникает вопрос окружения — хочется быть уверенным, что заказчик справится с установкой правильной версии Python и всех вспомогательных библиотек, но это не всегда простая задача. Было бы удобно упаковать приложение в автономный исполняемый файл.
И, наконец, хочется, чтобы конечное приложение работало быстрее, чем в среде разработки.
И вот тут настало время скомпилировать Python-код. Меня зовут Руслан, я старший разработчик компании «Цифровое проектирование». Сегодня я расскажу, как выбрать тот самый компилятор из множества доступных.
AOT/JIT
Компиляция – это сборка программы, включающая: трансляцию всех модулей программы, написанных на языке программирования высокого уровня, в эквивалентные программные модули на низкоуровневом языке, близком к машинному коду, или на машинном языке и сборку исполняемой программы. Существует два вида компиляции:
-
AOT-компиляция (ahead-of-time) – компиляция перед исполнением программы. Т.е. программа компилируется один раз, в результате компиляции получается исполняемый файл.
-
JIT-компиляция (just-in-time) – компиляция во время исполнения программы. Т.е. программа (а точнее, блоки программы) компилируется много раз — при каждом запуске.
Бенчмарк
Так как одной из целей является ускорение, необходимо оценить, насколько быстро работает скомпилированный код. В качестве бенчмарка будем использовать pyperfomance. К сожалению, pyperfomance не подошел для Cython и Pythran, потому что не позволяет визуализировать все возможности языка. Ускорения для Cython без модификации кода получить не удалось, а Pythran не умеет в пользовательские классы. Для них воспользуемся вычислением числа пи:
def approximate_pi(n):
step = 1.0 / n
result = 0
for i in range(n):
x = (i + 0.5) * step
result += 4.0 / (1.0 + x * x)
return step * result
Эксперименты будем проводить на процессоре Intel Core i7 10510U. На CPython 3.9.7 время вычисления числа пи до 100.000.000 знака заняло 5.82 секунды.
AOT-компиляция Python
PyInstaller
PyInstaller упаковывает приложения Python в автономные исполняемые файлы в Windows, GNU / Linux, Mac OS X, FreeBSD, Solaris и AIX.
Устанавливается через pip:
pip install pyinstaller
После установки для создания исполняемого файла достаточно выполнить команду:
pyinstaller <имя_файла>.py
В результате будет создано:
-
*.spec – файл спецификации (используется для ускорения будущих сборок приложения, связи файлов данных с приложением, для включения .dll и .so файлов, добавление в исполняемый файл параметров runtime-а Python);
-
build/ – директория с метаданными для сборки исполняемого файла;
-
dist/ – директория, содержащая все зависимости и исполняемый файл.
Сборку приложения можно настроить с помощью параметров командной строки:
-
—name – изменение имени исполняемого файла (по умолчанию, такое же, как у сценария);
-
—onefile – создание только исполняемого файла (по умолчанию, папка с зависимостями и исполняемый файл);
-
—hidden-import – перечисление импортов, которые PyInstaller не смог обнаружить автоматически;
-
—add-data – добавление в сборку файлов данных;
-
—add-binary – добавление в сборку бинарных файлов;
-
—exclude-module – исключение модулей из исполняемого файла;
-
—key – ключ шифрования AES256. Да, приложение не будет содержать исходного кода, но его можно декомпилировать, например, так: Pyinstaller Extractor (.exe → .pyc) и uncompile6 (.pyc → .py). Для скрытия исходного кода можно обфусцировать байт-код Python с помощью шифрования.
У PyInstaller есть ограничения. Он работает с Python 3.5–3.9. Поддерживает создание исполняемых файлов для разных операционных систем, но не умеет выполнять кросскомпиляцию, т. е. необходимо генерировать исполняемый файл для каждой ОС отдельно. Более того, исполняемый файл зависит от пользовательского glibc, т. е. необходимо генерировать исполняемый файл для самой старой версии каждой ОС.
PyInstaller знает о многих Python-пакетах и умеет их учитывать при сборке исполняемого файла. Но не о всех. Например, фреймворк uvicorn практически весь нужно явно импортировать в файл, к которому будет применена команда pyinstaller. Полный список поддерживаемых из коробки пакетов можно посмотреть здесь.
Cython
Cython — это оптимизирующий статический компилятор как для языка программирования Python, так и для расширенного языка программирования Cython. С его помощью можно код на Python транслировать в С и затем скомпилировать в бинарник, совместимый с CPython. Компиляцию придется делать под все операционные системы и архитектуры процессора.
Ставится Cython через pip:
pip install Cython
Рассмотрим его работу на примере с вычислением числа пи:
-
Немного модифицируем нашу функцию:
def approximate_pi(int n): cdef float step cdef float result cdef float x step = 1.0 / n result = 0.0 for i in range(n): x = (i + 0.5) * step result += 4.0 / (1.0 + x * x) return step * result
-
Cython → C:
cython -2 pi_approximater.pyx -o pi_approximater.c
-
Компилируем С-шный код:
gcc -g -O2 -shared -o pi_approximater.so pi_approximater.c python-config --includes --ldflags -fPIC
-
И замеряем время на бенчмарке: 3,66 секунды.
А что делать, если в нашем проекте несколько файлов, которые нужно скомпилировать? Тогда нужно использовать так называемый сценарий сборки. С его помощью можно модернизировать сборку в зависимости от операционной системы, указывать несколько файлов, которые необходимо скомпилировать, и многое другое.
Создадим файл build.py:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("bench_cython.pyx"),
)
Запустим: python build.py build_ext –-inplace
В результате будет сгенерирован .so/.dll файл.
Nuitka
Nuitka способна упаковывать приложения Python в автономные исполняемые файлы, а также транслировать Python-код в С для его последующей компиляции. Работает с разными версиями Python (2.6, 2.7, 3.3 — 3.9).
Ставится через pip:
pip install nuitka
Для генерации исполняемого файла достаточно выполнить команду:
python -m nuitka --follow-import some_program.py
Для компиляции модуля:
python -m nuitka --module some_module.py
Для компиляции пакета:
python -m nuitka --module some_package --include-package = some_package
Pythran
Pythran – статический компилятор Python, позиционирующий себя как ориентированный на научные вычисления и использующий преимущества многоядерных процессоров и блоков инструкций SIMD. Он транслирует Python-код, аннотированный описаниями интерфейса, в C++. До версии 0.9.5 (включительно) Pythran поддерживал Python 3 и Python 2.7. Последние версии поддерживают только Python 3.
Установка:
pip install pythran
Генерируем бинарный файл <имя файла>.so:
pythran <имя файла>.py
Pythran по умолчанию не умеет в пользовательские классы, поэтому при попытке их компиляции будет выброшена ошибка:
Top level statements can only be assignments, strings,functions, comments, or imports
Добавим комментарий аннотации функции:
#pythran export approximate_pi(int)
def approximate_pi(n):
step = 1.0 / n
result = 0
for i in range(n):
x = (i + 0.5) * step
result += 4.0 / (1.0 + x * x)
return step * result
Скомпилируем и бенчмарк выдает 0,00007 секунды.
cx-Freeze
cx-Freeze – это набор скриптов и модулей преобразования скриптов Python в исполняемые файлы. cx_Freeze — кроссплатформенный. Он поддерживает Python 3.5.2 и выше.
Ставится с помощью pip:
pip install cx_Freeze
Для генерации исполняемого файла достаточно выполнить команду:
cxfreeze <имя файла>.py
Сборку можно настроить с помощью параметров командной строки:
-
-h, —help — справка;
-
-O — оптимизировать сгенерированный байт-код согласно PYTHONOPTIMIZE;
-
-c, —compress — сжать байт-код в zip-файлах;
-
-s, —silent — выводить только предупреждения и ошибки;
-
—target-dir=DIR, —install-dir=DIR — каталог, в который следует поместить целевой файл и все зависимые файлы.
Также возможно использование сценария сборки, например, так:
import sys
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base)])
Сборка исполняемого файла:
python setup.py build
JIT-компиляция Python
JIT-компиляция не позволяет скрывать исходники или создавать автономный исполняемый файл, но дает возможность значительно ускорить выполнение программы.
PyPy
PyPy — интерпретатор языка программирования Python 2.7 и Python 3.7. Он написан на RPython и содержит:
-
компилятор байт-кода, отвечающий за создание объектов кода Python из исходного кода пользовательского приложения;
-
оценщик байт-кода, ответственный за интерпретацию объектов кода Python;
-
стандартное объектное пространство, отвечающее за создание и управление объектами Python, видимыми приложением.
PyPy поддерживает сотни библиотек Python, включая NumPy.
Основные особенности (сравнение с CPython):
-
Скорость. При выполнении длительно выполняющихся программ, когда значительная часть времени тратится на выполнение кода Python, PyPy может значительно ускорить ваш код.
-
Использование памяти. Программы Python, требующие много памяти (несколько сотен Мб или более), могут занимать меньше места, чем в CPython. Однако это не всегда так, поскольку зависит от множества деталей. Также базовый уровень потребления оперативной памяти выше, чем у CPython.
Скачать PyPy можно с здесь. После скачивания PyPy готов к запуску после распаковки архива. Если необходимо сделать PyPy доступным для всей системы, достаточно поместить символическую ссылку на исполняемый файл pypy в /usr/local/bin. Также можно поставить с помощью pyenv.
PyPy работает на Mac, Linux (не все дистрибутивы) или Windows.
Для запуска кода с помощью PyPy вместо команды python3 (как c помощью CPython) достаточно воспользоваться командой pypy3:
pypy3 something.py
Pyston
Pyston — это форк CPython 3.8.8 с дополнительной оптимизацией производительности. В настоящее время он поддерживает установку только из исходников. Или с помощью pyenv.
В Pyston поддерживаются все возможности CPython, в том числе C API для разработки расширений на языке Си. Среди основных отличий Pyston от CPython помимо общих оптимизаций выделяется использование DynASM JIT и inline-кэширования.
Заключение
Итак, мы рассмотрели 5 фреймворков AOT-компиляции Python. Для любителей аналитики, ниже приведена таблица со сравнительным анализом.
PyInstaller |
Cython |
Nuitka |
Pythran |
cx-Freeze |
|
Генерация автономных исполняемых файлов |
+ |
— |
+ |
— |
+ |
Компиляция python-модуля в исполняемый файл, совместимый с CPython |
— |
+ |
+ |
+ |
+ |
Компиляция байт-кода Python |
+ |
— |
+ |
— |
+ |
Трансляция Python в С/C++ |
— |
+ |
+ |
+ |
— |
Кроссплатформенность |
+ |
+ |
+ |
+ |
+ |
Кросскомпиляция |
— |
— |
— |
— |
— |
Среднее относительное время выполнения кода на различных версиях CPython, интерпретаторах с поддержкой JIT-компиляции и после сборки на фреймворках AOT-компиляции:
Список литературы
-
http://www.pyinstaller.org/
-
https://cython.org/
-
https://nuitka.net/
-
https://github.com/serge-sans-paille/pythran
-
https://cx-freeze.readthedocs.io/en/latest/
-
https://github.com/pyston/pyston
-
https://www.pypy.org/
Python – популярный язык разработки, который стал пользоваться спросом в последние несколько лет. Он достаточно прост в изучении, но в некоторых его особенностях непросто разобраться даже опытному программисту.
Изначально Python создает приложение в формате .py. Это не совсем удобно, особенно если пользователь имеет дело в Windows. Для комфортной проверки и формирования утилиты нужно скомпилировать py в exe. Добиться соответствующего результата удается несколькими способами. О них и зайдет речь далее. Предложенные сведения пригодятся всем, кто планирует писать программы на Питоне.
О формате executable
Exe – это формат исполняемого типа. Он знаком всем, кто хотя бы раз запускал MS Windows. Представляет собой набор инструкций, который заставляет компьютер выполнить ту или иную задачу. Не важно, на каком языке написана программа – Питон, C++ или Java. Если проект скомпилирован в exe, он будет успешно прочтен устройством.
Перед тем как думать, как скомпилировать python в exe файл, нужно понимать – создание подобного документа нацелено «на машину». Экзешник считывается устройством, базируется на машинном коде.
Данный вариант применяется в различных операционных системах:
- Windows;
- DOS;
- Symbian;
- OS/2.
Может предусматривать в своем составе метаданные, включая цифровые подписи. Для обычного пользователя исполняемый файл – это готовое к запуску приложение, которое остается установить или активировать.
Способы преобразования проекта
Python скрипт в exe перевести не слишком сложно. Сборка может проходить как автоматически, так и при помощи online/offline приложений. Все зависит от личных предпочтений разработчика.
Создать исполняемый файл на Питоне (экзешник) – дело нескольких минут. Далее будут представлены популярные и известные методы, позволяющие преобразовывать Python Script в интересующий формат.
Auto PY
Первый вариант – один из самых простых. Он позволит сделать исполняемый файл в несколько кликов. Речь идет об использовании приложения, которое носит название «компилятор». Это – Auto PY to EXE.
Перевод проекта через соответствующее ПО с Python в экзешник позволит запускать утилиты на других машинах. Для этого не нужно предварительно устанавливать Питон.
Инициализация
Чтобы сделать исполняемый файл соответствующим способом, нужно провести инициализацию Auto PY to EXE. Первый вариант – установка «в командной строке». Для этого требуется ввести команду: pip install auto-py-to-exe.
Второй вариант – через GitHub. Для этого нужно:
- Клонировать репозиторий .
- Перейти в папку с соответствующим компилятором .
- Запустить файл setup.py.
- Проверить актуальную версию.
- Открыть прогу (Python Scripts), с которой планируется дальнейшая работа. Процесс осуществляется в терминале .
Установка завершена. Конвертер готов к непосредственному использованию. Теперь можно сделать исполняемый файл из Python в несколько кликов.
Преобразование
Создание экзешника (executables) из Питоновского project проводится в несколько этапов:
- Добавляем в конвертор местоположение файла. На этом этапе прописывается путь, где лежит интересующий пользователя скрипт. Нужно перейти к местоположению документа и добавить соответствующий «адрес»
.
- Выбор директории. One Directory создаст папку со всеми необходимыми документами и одним исполняемым, когда будет обрабатывать скрипт.
- Определить тип приложения. На данном этапе предлагается создать документ или консольного типа, или оконного. Windows Based – вариант, который скроет console. Компиляция типа Console Based используется, если мы преобразуем script, предусматривающий работу с консолью. Window Based – это вариант для GUI.
- Компиляция. Здесь компилируем project. На экране появятся дополнительные опции. Их выбор зависит от предпочтений разработчика. Чтобы начать процедуру, необходимо нажать на кнопку Convert.
Completed Project через Auto PY to EXE разместится в отдельной папке. По умолчанию – это место, откуда запускался converter. В папке множество документов, но всего один – с интересующим форматом. При двойном нажатии на него будет запускаться программа на Python.
Py Installer
Сборка exe file может проводиться через компилятор Pyinstaller. Установка – через pip. После этого рекомендуется проверить build компилятора – лишь после делать все необходимые манипуляции. Команда pip install PyInstaller поможет активировать «утилиту». Она включена в стандартный пакет Python. Сохранить py file to exe будет проще простого.
Как собрать проект
Конвертер позволяет сохранить весь проект в единый Python-файл. Создание (сборка) происходит так:
- Считывается скрипт.
- Активируется код для выявления зависимостей.
- Создается файл spec. Он включает в себя название скрипта, библиотеку-зависимости, иные документы.
- Converter собирает копии библиотек и файлов вместе с активным интерпретатором Python.
- Для того, чтобы перевести код (script) в file исполняемого типа, создается папка Build. В ней фиксируются логи и рабочие документы.
- Создается папка DIST. Она расположена в папке со скриптом. Этот этап пропускается при наличии соответствующего компонента.
- Сохраняем через converter необходимые документы вместе со скриптом в одну папку или исполняемый файл.
Если задействовать onedir или -D при генерации, code и его files разместятся в одной папке. Это – настройки по умолчанию. Применение onefile или -F – это создание сохранений в едином документе.
Пример
Convert Python код в exe – не так трудно. Все installing и compile code отнимают некоторое время, но требуют минимального вмешательства. Вот – пример того, как перевести (create build) исходный код в интересующую форму:
- Дан документ simple.py .
- Ввести в командной строке pyinstaller –onefile simple.py.
- Дождаться завершения процесса.
Это – compile (возможность сохранить) Python projects code on исполняемый документ. Установка завершится – появятся папки built и dist. А еще – новый spec-файл.
Py2exe
Есть еще поход – convert (compile) coding через Py2exe. Подойдет для Питона 3.4 и версий ниже. Сначала creates визуальное окружение, затем – сохраняем picture и иные компоненты скрипта в единое целое. Приведенный пример – проект с именем myenv.
Для converting python auto py to документ exe, нужно:
- Creating визуальное окружение .
- Installed py2 exe .
- Completed process by creating «windowed» file. В виртуальном окружении выполняется команда
.
В ходе процесса сохраняется готовый скрипт. Он при запуске будет открываться и закрываться очень быстро. Чтобы converted файл не закрывал терминал, нужно добавить строчку в документе Питона.
В сети
Задумываясь, как сделать exe из Python, можно created building при помощи online converts. Это специализированные компиляторы, работающие в интернете. Online сервисы не требуют install, функционируют так:
- На экране появляется главное окно — main line.
- В окне compiler нужно ввести скрипт.
- Нажать на кнопку Installation. Иногда – Compiled или Run.
- Online сервис compiles файл интересующего формата. Иногда его можно выбрать. При ошибке обработки операции на экране появится надпись «failed».
Остается скачать compiling документацию и (или) его проект с полноценной папкой. Можно запускать документ.
А вот – туториал, в котором наглядно показано, как из файла py сделать exe. Лучше разобраться в теме помогут специализированные онлайн-курсы.
Обычно код на Питон запускают двумя способами: через терминал или через текстовый редактор / IDE.
При этом стоит отметить, что файлик Python — это всего лишь скрипт, который сохранён в расширении .py. Да, это очевидно, но в этом и кроется проблема: иногда нужно скрыть исходный код, а поделиться программкой (в виде альфа-версии, например) очень хочется.
Одно из решений, которое закрывают боль с исходным кодом — это конвертация файла Python в исполняемый exe-файлик.
В этой статье мы научимся создавать «экзешники» при помощи, Pyinstaller, auto-py-to-exe и Py2exe — расскажем, как как скомпилировать python в EXE-файл.
Перед тем, как продолжить чтение статьи, скачайте этот репозиторий. Он здорово поможет вам понять процесс, если вы будете повторять все шаги вместе с нами.
- Код могут украсть. Об этом мы уже говорили выше. Куда проще достать исходный код непосредственно из py-файла, чем из скомпилированного приложение. Py-файл достаточно просто открыть!
- Хочется поделиться кодом с другими юзерами. Дело не только в том, что ваш код могут украсть. Зачастую код содержит зависимости, которыми должен владеть другой юзер перед запуском вашего Python-кода. Но что, если он вообще ничего не смыслит в программировании? Не заставишь ведь его сперва выучить программирование, чтобы оценить ваше новое суперприложение. Проще создать исполняемый файл.
- Исполняемый файл можно запускать автоматически, по расписанию. Этот пункт актуален, если вы решили написать утилиту для вашего ПК, и эта утилита должна запускаться либо в определенное время, либо вместе с запуском ОС.
Конвертация кода Python в файл .exe
Для начала создадим скрипт на Python. В качестве примера мы используем открытый код бронирования жилья Airbnb в Нью-Йорке. Если у вас уже есть готовый код, можете сразу использовать его.
import pandas as pd
from pandas.api.types import CategoricalDtype
def perform_validation(filename:str):
"""
A function to validate inputs for NYC Airbnb Open data.
"""
path_to_data = "../.."
data = pd.read_csv(f"{path_to_data}{filename}")
# Convert neighbourhood_group to type category
neighbourhood_group_to_cat = CategoricalDtype(
categories=["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"],
ordered=False
)
data["neighbourhood_group"] = data["neighbourhood_group"].astype(neighbourhood_group_to_cat)
# Convert room_type to type category
room_type_to_cat = CategoricalDtype(
categories=["Entire home/apt", "Private room", "Shared room"],
ordered=False
)
data["room_type"] = data["room_type"].astype(room_type_to_cat)
# Convert last_review to datetime
data["last_review"] = pd.to_datetime(data["last_review"])
# Minimum nights a person can stay is one night
assert data["minimum_nights"].min() >= 1
# Minimum number of reviews is 0
assert data["number_of_reviews"].min() >= 0
# Minimum number of reviews per month
assert data["reviews_per_month"].min() >= 0.00
# Minimum amount of listings per host
assert data["calculated_host_listings_count"].min() >= 1
# Number of days when listing is available for books
# Could be 0 if tennant has long term booking
assert data["availability_365"].min() >= 0
# Save validated data
data.to_csv("validated_ab_nyc_2019.csv", index=False)
if __name__ == "__main__":
# User inputs filename
filename = input("Enter filename: ")
# Ensure it's a string
if not filename.isalpha():
filename = str(filename)
# Automated validation
perform_validation(filename)
Вы не забыли скачать библиотеки по ссылке по введении? Сделайте это сейчас.
Вот структура файлов на GitHub:
# Directory structure
| AB_NYC_2019.csv
|
+---auto_py_to_exe
| | requirements.txt
| | validation.py
+---pyinstaller
| requirements.txt
| validation.py
Каждая из директорий должна обладать своей виртуальной средой. Убедитесь, что среды развёрнуты и в директории pyinstaller, и в auto-py-to-exe.
Сохраните ваш код и скопируйте его в обе директории.
Что делать в Pyinstaller
Ещё раз убедитесь, что виртуальная среда развёрнута. Да, мы настаиваем. Проверьте, установлены ли все зависимости между библиотеками и кодом.
Всё в порядке? Запускайте команду:
pyinstaller --onefile validation.py
Процесс должен запуститься, и в конце консоль сообщит: «Completed successfully». Значит, всё прошло успешно. ?
В папке с библиотекой и кодом должны появиться две новые директории под названиями build и dist. В папке dist вы найдёте заветный exe-файл. Запустите его и проверьте работу приложения.
Что делать в Auto-py-to-exe
Также скиньте файлик с кодом в папку с библиотекой и проверьте зависимости между кодом и библиотекой.
Запустите команду:
Команда запустит графический интерфейс.
Запускаем компилятор Auto-py-to-exe // DataCamp
- В строчке «Script Location» нажмите «Browse» и выберите py-скрипт.
- В строчке «Onefile» выберите, скомпилируется код в единый файл или в папку. В папке будет содержаться exe-файл и все зависимости кода.
- В строчке «Console Window» выберите настройки отображения exe-приложения, когда оно будет запущено. Если выбрать «Console Based», запустится и программа, и консоль, в которой будут показаны процессы. Опция «Window Based» скрывает консоль.
- Нажмите кнопку «Convert .py to .exe». Готово!
Компиляция с Py2exe
Py2exe — это старый, но проверенный способ компиляции Python скрипт в исполняемый файл. Основное отличие Py2exe от Pyinstaller заключается в том, что он предназначен исключительно для Windows и поддерживает ограниченный набор версий Python — Python 3.4 и ниже.
До установки прописываем:
>py -3.4 -m venv myenv
> myenv\Scripts\activate.bat
Устанавливаем:
Компиляция python в exe:
>python -m py2exe.build_exe name.py -c --bundle-files 0 // name.py нужно заменить на имя вашего проекта
Так появится папка DIST, в которой и будет лежать файл. Чтобы быстро перейти к нему, пишем:
Запускаем exe-файл
После компиляции и запуска exe-файла, тот запустит консоль и попросит вас ввести имя файла. Придумайте его и укажите расширение, в котором всё должно работать. К примеру, Tproger-is-the-best-it-media-in-the-world.csv
. Тогда консоль закроется, а в папке появится заветный файлик с расширением .csv.
И всё — вы великолепны!
103К открытий150К показов
Содержание
Определение
Основы работы
Когда нужна компиляция
Инструменты
Примеры
Преимущества и недостатки компиляции
Реальная история успеха
Советы и рекомендации
Заключение
Вопрос-Ответ
Комментарии
Дата публикации
28.12.2024
Обновлено
10.01.2025
Python – один из самых популярных языков программирования благодаря своей простоте, гибкости и огромному сообществу. Несмотря на то, что Python является интерпретируемым языком, существуют способы его компиляции для достижения высокой производительности и упрощения распространения программ.
Эксперты рекомендуют
Определение
Компиляция – это процесс преобразования исходного кода в исполняемый файл или другой формат, подходящий для выполнения на компьютере.
В процессе работы часто возникают ситуации, когда интерпретируемая природа языка становится узким местом для производительности или безопасности. Именно в этих случаях на помощь приходят инструменты для компиляции.
Основы работы
Чем отличается от интерпретации?
Интерпретация – это кодирование строчка за строчкой без предварительного преобразования. Компиляция, напротив, предполагает преобразование в формат, понятный компьютеру (например, машинный).
Python сочетает оба подхода. При запуске программы код сначала компилируется в байт, а затем интерпретируется. Однако этот процесс не дает максимальной производительности.
Когда нужна компиляция
Процесс состоит из нескольких этапов:
1. Превращение в байт-код:
- Исходный код автоматически компилируется в байт при запуске.
- Сохраняется в файлах с расширением .pyc.
- Этот процесс ускоряет повторные запуски программы.
- Он независим от операционной системы.
- Хранение байт-кода улучшает производительность крупных проектов.
2. Использование сторонних инструментов:
- Специальные утилиты создают исполняемые файлы.
- Примеры инструментов: PyInstaller, Cython, Nuitka.
- Они преобразуют Python-код в байт или C.
- Некоторые инструменты объединяют код и зависимости в один файл.
- Инструменты могут создавать исполняемые файлы для разных платформ.
- Поддерживается частичная компиляция для критичных участков.
3. Создание исполняемых файлов:
- Компиляция позволяет генерировать .exe, .dmg или исполняемые файлы для Linux.
- Это упрощает использование программы конечным пользователем.
- Пользователю не нужно устанавливать Python и зависимости.
- Такой подход популярен в коммерческих приложениях.
- Исполняемые файлы защищают исходный код.
- Их можно запускать без дополнительных настроек.
Почему Python не полностью компилируется изначально?
Полная компиляция ограничена следующими особенностями:
1. Динамическая типизация:
- Типы переменных определяются только во время выполнения.
- Это позволяет гибко работать с разными типами данных.
- Требуется жесткая типизация.
- Динамика позволяет изменять типы без явного указания.
- Она удобна для прототипирования и тестирования.
2. Гибкость и рефлексия:
- Изменение кода во время выполнения.
- Рефлексия используется для работы с атрибутами объектов.
- Она упрощает реализацию сложных алгоритмов.
- Динамическое поведение не совместимо с компиляцией.
3. Кроссплатформенность:
- Интерпретируемый код одинаково работает на разных ОС.
- Компиляция требует адаптации для каждой платформы.
- Байткод независим от операционной системы.
- Это упрощает переносимость приложений.
- Кроссплатформенность важна для веб- и серверных приложений.
- Интерпретация позволяет быстрее начинать работу.
Ключевые понятия
Ключевое понятие |
Описание |
Байт-код | Промежуточное представление Python. |
Хранится в файлах .pyc. | |
Ускоряет выполнение повторных запусков. | |
Независим от операционной системы. | |
Создается автоматически при запуске скриптов. | |
Уменьшает нагрузку на интерпретатор. | |
Виртуальная машина (PVM) | Исполняет байт-код. |
Работает как «мост» между кодированием и ОС. | |
Обеспечивает переносимость программ. | |
Упрощает выполнение программ на разных устройствах. | |
Абстрагирует сложные операции от пользователя. | |
Позволяет использовать кроссплатформенные библиотеки. | |
Сторонние компиляторы | Инструменты, такие как PyInstaller, Cython и Nuitka. |
Преобразуют Python-кодирование в исполняемый формат. | |
Поддерживают частичную и полную компиляцию. | |
Упрощают распространение программ. | |
Обеспечивают защиту. | |
Могут интегрироваться с языками C и C++. |
Инструменты
1. PyInstaller
PyInstaller — один из самых популярных инструментов для создания исполняемых файлов.
Особенности:
- Поддерживает Windows, macOS и Linux.
- Обрабатывает большинство сторонних библиотек, включая PyQt и NumPy.
- Легко работает с графическими интерфейсами, такими как Tkinter или PyQt.
- Позволяет добавлять иконки, информацию о версии и другие метаданные.
- Генерирует как один файл (standalone), так и набор для запуска.
2. Cython
Cython — мощный инструмент, который компилирует в C-код для повышения производительности.
Особенности:
- Преобразует в C или C++, после чего проводит компилирование.
- Подходит для ускорения выполнения ресурсоемких операций.
- Поддерживает смешение.
- Работает как с обычным кодом, так и с расширениями.
- Увеличивает производительность на 30–300% в зависимости от задач.
3. Nuitka
Nuitka — инструмент для полной компиляции в машинный код.
Особенности:
- Генерирует исполняемые файлы для Windows, macOS и Linux.
- Поддерживает весь стандартный функционал.
- Совместим с большинством сторонних библиотек.
- Сохраняет структуру программы, включая все модули.
4. py2exe
py2exe — инструмент, предназначенный для создания исполняемых файлов только для Windows.
Особенности:
- Упаковывает скрипты в .exe.
- Удобен для разработки Windows-программ.
- Работает с большинством стандартных библиотек.
- Простота настройки.
- Быстрое создание.
- Поддерживает только Windows.
5. cx_Freeze
cx_Freeze — универсальный инструмент для компиляции программ в исполняемые файлы.
Особенности:
- Поддерживает Windows, macOS и Linux.
- Упаковывает программы вместе с зависимостями.
- Хорошо работает с консольными и графическими приложениями.
- Позволяет создавать переносимые приложения.
- Подходит для коммерческих приложений.
- Не всегда работает с нестандартными библиотеками.
6. py2app
py2app — инструмент для создания приложений исключительно для macOS.
Особенности:
- Создает .app-пакеты для macOS.
- Упрощает распространение приложений для macOS-пользователей.
- Хорошо интегрируется с macOS-средой.
- Идеально для macOS-разработчиков.
- Создает приложения, которые легко распространять через App Store.
- Поддерживает большинство macOS-фреймворков.
Примеры
1. PyInstaller
Допустим, у вас есть файл example.py. Для создания исполняемого файла выполните следующую команду в терминале:
pyinstaller —onefile example.py
Результат: Создается example.exe (Windows) или просто example (Linux/macOS) в папке dist. Опция —onefile упаковывает всё в один файл.
Добавить иконку: pyinstaller —onefile —icon=app_icon.ico example.py
Включить скрытые импортируемые модули: pyinstaller —onefile —hidden-import=module_name example.py
2. Cython
Создайте файл example.pyx с содержимым:
def say_hello():
print(«Hello from Cython!»)
Создайте setup.py для сборки:
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize(«example.pyx»)
)
Выполните сборку: python setup.py build_ext —inplace
Результат: Скомпилируется файл с расширением .c и соответствующий .so (Linux/macOS) или .pyd (Windows). Скомпилированный модуль можно импортировать как обычный Python-модуль:
import example
example.say_hello()
3. Nuitka
Для example.py:
print(«Hello, Nuitka!»)
Скомпилируйте с помощью Nuitka:
nuitka —standalone —onefile example.py
Результат: Будет создан исполняемый файл, содержащий Python-код и зависимости. Можно запустить без установленного Python.
Включить оптимизацию: nuitka —standalone —onefile —lto —follow-imports example.py
4. py2exe
Создайте setup.py:
from distutils.core import setup
import py2exe
setup(console=[‘example.py’])
Выполните сборку: python setup.py py2exe
Результат: Скомпилируется .exe-файл, который можно запускать на Windows без Python.
5. cx_Freeze
Создайте setup.py:
from cx_Freeze import setup, Executable
setup(
name=»ExampleApp»,
version=»1.0″,
description=»Example application»,
executables=[Executable(«example.py»)],
)
Выполните команду: python setup.py build
Результат: Будет создан исполняемый файл в папке build.
6. py2app
Создайте setup.py:
from setuptools import setup
APP = [‘example.py’]
OPTIONS = {‘argv_emulation’: True}
setup(
app=APP,
options={‘py2app’: OPTIONS},
setup_requires=[‘py2app’],
)
Выполните сборку: python setup.py py2app
Результат: В папке dist появится .app-файл, который можно запускать на macOS.
Преимущества и недостатки компиляции
Преимущества
- Ускорение работы. Преобразует код в машинный, что повышает производительность, особенно для вычислительных задач.
- Упрощение распространения. Создание исполняемых файлов (.exe) избавляет пользователей от необходимости устанавливать Python и зависимости.
- Защита. Затрудняет восстановление исходного кода, защищая интеллектуальную собственность.
- Оптимизация процессов. Ускоряет критичные участки, такие как математические вычисления или работа с большими данными.
- Снижение зависимости от интерпретатора. Позволяет создавать автономные приложения, работающие без установки Python.
Недостатки
- Увеличение размера файла. Скомпилированные программы занимают больше места из-за включения зависимостей.
- Потеря кроссплатформенности. Файлы работают только на целевой операционной системе.
- Ограничения инструментов. Некоторые функции и библиотеки могут работать некорректно.
- Сложности отладки. Ошибки кодирования труднее анализировать и исправлять.
- Длительность. Процесс сборки занимает больше времени, особенно в больших проектах.
- Усложнение обновлений. Каждое обновление требует пересборки программы, что увеличивает время разработки.
Реальная история успеха
Алексей, фрилансер из Москвы, столкнулся с проблемой производительности при разработке аналитической платформы. Его скрипты, обрабатывающие большие объемы данных, работали слишком медленно, и клиенты жаловались на низкую скорость.
Решение пришло в виде Cython. Алексей преобразовал наиболее ресурсоемкие части, что позволило ускорить выполнение программы в 10 раз. Благодаря этому проект получил высокие отзывы, а Алексей заключил долгосрочные контракты с заказчиками.
Советы и рекомендации
- Выбирайте методы в зависимости от задачи: PyInstaller – для дистрибуции, Cython – для повышения скорости, Nuitka – для сложных приложений.
- Оптимизируйте кодирование. Избегайте избыточных операций и лишних зависимостей.
- Тестируйте скомпилированный файл на целевых платформах, чтобы избежать неожиданных ошибок.
- Регулярно обновляйте инструменты для совместимости с последними версиями.
- Обращайте внимание на документацию инструментов – она поможет разобраться с тонкостями.
Заключение
Компиляция Python – это мощный инструмент, который может значительно улучшить работу ваших приложений. Она увеличивает скорость выполнения, упрощает распространение и защищает код. Используйте описанные в статье инструменты и рекомендации, чтобы достичь максимальной эффективности в своих проектах.