Компиляция программы на python 3 в exe с помощью программы cx_Freeze
Наверняка, у каждого Python-программиста возникало непреодолимое желание, а изредка и реальная потребность, скомпилировать свою программу на python в exe файл. Сегодня я расскажу, как это сделать с помощью программы cx_Freeze.
Вопрос 1: а оно надо?
Прежде, чем начинать компилировать программу, нужно убедиться, что это действительно необходимо.
«Компиляция» программы на python — процесс, который может сопровождаться множеством проблем. Более того, это не компиляция в машинный код, как, например, программы на C, а лишь «сборка» в исполняемый файл вашей программы вместе с частью интерпретатора python.
Поэтому, если вы будете использовать программу сами или на компьютерах тех, кто её будет использовать, будет стоять интерпретатор python, то вам не нужно её компилировать.
Установка cx_Freeze
Если компилировать программу на python всё-таки нужно, то скачиваем cx_Freeze с http://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_freeze (так как в ней нет одного неприятного бага, который есть в официальной версии).
Затем устанавливаем, не забывая правильно выбрать директорию, где расположен python.
Компиляция
Компилировать будем программу «блэкджек» (файл 21.py) (кому лень смотреть, привожу полный исходный код).
Создаём в папке с программой файл setup.py с содержимым:
Переходим в командную строку (обычно Пуск → Стандартные → Командная строка). Переходим в папку с программой (в моём случае D:\Dima\py). Запускаем команду C:\Python34\python.exe setup.py build (вместо C:\Python34 нужно написать папку, куда установлен python).
Начнется процесс сборки, в котором cx_Freeze может выдавать предупреждения, но, скорее всего, они не повлияют на работу программы.
Поздравляю! В папке build теперь есть ваша папка с исполняемым файлом!
Заметьте, не файл, а папка! Все остальные файлы также нужны для работы программы (да, это недостаток cx_Freeze). К тому же, при завершении программы окно сразу закрывается (а не ждет нажатия клавиши), поэтому в конец программы нужно дописать что-то вроде:
И скомпилировать ещё раз.
Также можно создать msi-архив командой C:\Python34\python.exe setup.py bdist_msi.
Разумеется, при компиляции более сложных программ вы можете столкнуться с более сложными проблемами.
Для их решения следует воспользоваться официальной документацией.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Упаковка Python программы в EXE файл
Чтобы понять, зачем это может потребоваться, предположим, что вы написали программу на Python. И теперь нужно ее показать руководителю, заказчику или другу. И здесь сразу могут возникнуть трудности. Потому что принимаемая сторона вряд ли обладает познаниями в программировании и к тому же не имеет на компьютере установленного Python, чтобы иметь возможность запустить ваш код.
Гораздо проще заранее позаботиться о простоте запуска Python программы, и упаковать ее в исполняемый EXE файл. Преимущество такого файла в том, что он запускается любым пользователем на любом компьютере под управлением Windows. Даже если на компьютере не установлен Python.
Для упаковки программы будем использовать пакет PyInstaller и надстройку над ним auto-py-to-exe
Ссылки на документацию по данным пакетам:
PyInstaller генерирует EXE файл из командной строки. А auto-py-to-exe надстраивает над PyInstaller пользовательский интерфейс, в котором удобно выбирать различные параметры.
Установка пакетов для упаковки в EXE файл
Для установки пакетов, мы будем использовать pip — систему управления пакетами, написанными на Python.
-
- В поиске Windows набираем cmd
- Запускаем приложение Командная строка от имени администратора(ВАЖНО!)

- Набираем команды для установок пакетов и нажимаем Enter:
• pip install pyinstaller
• pip install auto-py-to-exe
- Дополнительные пакеты установлены.
Упаковка Python программы в EXE файл
Давайте упакуем с помощью установленных пакетов готовую программу A/B Калькулятор.
Для начала, посмотрим как она запускается в неупакованном виде. Открываем файл программы в редакторе Geany и нажимаем Выполнить (F5). Программа выполняется на фоне командной строки. И когда мы окно программы закрываем, окно консоли еще остается открытым.
Перед генерацией EXE файла подготовим директорию, куда он будет сохраняться. Например, на Рабочем столе создаем папку Генерация EXE

- Запускаем командную строку от администратора
- Вводим команду auto-py-to-exe
- В окне приложения производим настройки:
- Указываем путь к директории с исходным файлом программы
- Выбираем опцию Один файл
- Выбираем опцию Оконное приложение (скрыть консоль)
- Нажимаем Настройки и указываем путь к директории экспорта, куда будет сохранен готовый EXE файл
- Жмем кнопку Конвертировать PY в EXE
Некоторое время программа производит обработку. После окончания обработки появляется кнопка Открыть папку вывода . Нажимаем ее и видим в папке готовый EXE файл.

Запускаем EXE файл и проверяем работоспособность. Программа AB Калькулятора запустилась без использования консоли. Теперь файл программы можно пересылать для запуска абсолютно на любом компьютере.
Примечание. Если в процессе запуска EXE файлов возникают проблемы, проверьте, установлен ли Microsoft Visual C++ Redistributable. Если требуется его установка, найти его можно по ссылке .
Как создать exe файл для Python кода с помощью PyInstaller
Установка PyInstaller не отличается от установки любой другой библиотеки Python.
pip install PyInstaller
Вот так можно проверить версию PyInstaller.
pyinstaller --version
Я использую PyInstaller версии 4.2.
Создание exe файла с помощью PyInstaller
PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:
- Считывает файл скрипта.
- Анализирует код для выявления всех зависимостей, необходимых для работы.
- Создает файл spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
- Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
- Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
- Создает папку DIST в папке со скриптом, если она еще не существует.
- Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.
Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.
Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.
import time name = input("Введите ваше имя ") print("Ваше имя ", name) time.sleep(5)Создадим один исполняемый файл. В командной строке введите:
pyinstaller --onefile simple.pyПосле завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.
Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.
Вот что произойдет после запуска файла.
Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.
. a = Analysis(['simple1.py'], pathex=['E:\\myProject\\pyinstaller-tutorial'], binaries=[], datas=[('netflix_titles.csv', '.')], .Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .
Добавление файлов с данными и параметр onefile
Если задать параметр --onefile , то PyInstaller распаковывает все файлы в папку TEMP, выполняет скрипт и удаляет TEMP. Если вместе с add-data указать onefile, то нужно считать данные из папки. Путь папки меняется и похож на «_MEIxxxxxx-folder».
import time import sys import os # pip install pandas import pandas as pd def count_records(): os.chdir(sys._MEIPASS) data = pd.read_csv('netflix_titles.csv') print("Всего фильмов:", data.shape[0]) if __name__ == "__main__": count_records() time.sleep(5)Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.
pyinstaller --onefile --add-data "netflix_titles.csv;." simple1.pyПосле успешного создания файл simple1.exe появится в папке DIST.
Можно скопировать исполняемый файл на рабочий стол и запустить, чтобы убедиться, что нет никакой ошибки, связанной с отсутствием файла.
Дополнительные импорты с помощью Hidden Imports
Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named …
Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.
Например, чтобы добавить библиотеку os, нужно написать вот так:
pyinstaller --onefile --add-data "netflix_titles.csv;." — hidden-import "os" simple1.pyФайл spec
Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.
PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.
Файл с расширением .spec сохраняется по умолчанию в текущей директории.
Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:
- Собрать в один бандл с исполняемым файлы данных.
- Включить другие исполняемые файлы: .dll или .so.
- С помощью библиотек собрать в один бандл несколько программы.
Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.
import time import tensorflow as tf def view_model(): print(tf.__version__) if __name__ == "__main__" : model = view_model() time.sleep(5)Компилируем модель с помощью PyInstaller:
pyinstaller -F simpleModel.pyПосле успешной компиляции запускаем исполняемый файл, который возвращает следующую ошибку.
. File "site-packages\tensorflow_core\python_init_.py", line 49, in ImportError: cannot import name 'pywrap_tensorflow' from 'tensorflow_core.python'Исправим ее, обновив файл spec. Одно из решений — создать файл spec.
$ pyi-makespec simpleModel.py -F wrote E:\pyinstaller-tutorial\simpleModel.spec now run pyinstaller.py to build the executableКоманда pyi-makespec создает spec-файл по умолчанию, содержащий все параметры, которые можно указать в командной строке. Файл simpleModel.spec создается в текущей директории.
Поскольку был использован параметр --onefile , то внутри файла будет только раздел exe.
. exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='simpleModel', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True )Если использовать параметр по умолчанию или onedir, то вместе с exe-разделом будет также и раздел collect.
Можно открыть simpleModel.spec и добавить следующий текст для создания хуков.
# -*- mode: python ; coding: utf-8 -*- block_cipher = None import os spec_root = os.path.realpath(SPECPATH) options = [] from PyInstaller.utils.hooks import collect_submodules, collect_data_files tf_hidden_imports = collect_submodules('tensorflow_core') tf_datas = collect_data_files('tensorflow_core', subdir=None, include_py_files=True) a = Analysis(['simpleModel.py'], pathex=['E:\\myProject\\pyinstaller-tutorial'], binaries=[], datas=tf_datas + [], hiddenimports=tf_hidden_imports + [], hookspath=[], .Создаем хуки и добавляем их в hidden imports и раздел данных.
Хуки
Файлы хуков расширяют возможность PyInstaller обрабатывать такие требования, как необходимость включать дополнительные данные или импортировать динамические библиотеки.
Обычно пакеты Python используют нормальные методы для импорта своих зависимостей, но в отдельных случаях, как например TensorFlow, существует необходимость импорта динамических библиотек. PyInstaller не может найти все библиотеки, или же их может быть слишком много. В таком случае рекомендуется использовать вспомогательный инструмент для импорта из PyInstaller.utils.hooks и собрать все подмодули для библиотеки.
Скомпилируем модель после обновления файла simpleModel.spec.
pyinstaller simpleModel.specСкопируем исполняемый файл на рабочий стол и увидим, что теперь он корректно отображает версию TensorFlow.
Вывод:
PyInstaller предлагает несколько вариантов создания простых и сложных исполняемых файлов из Python-скриптов:
- Исполняемый файл может собрать в один бандл все требуемые данные с помощью параметра --add-data .
- Исполняемый файл и зависимые данные с библиотеками можно собрать в один файл или папку с помощью --onefile или --onedir соответственно.
- Динамические импорты и библиотеки второго уровня можно включить с помощью hidden-imports .
- Файл spec позволяет создать исполняемый файл для обработки скрытых импортов и других файлов данных с помощью хуков.
Преобразуем проект на Python в исполняемый файл .EXE

С помощью Auto PY to EXE можно с лёгкостью преобразовывать файлы .py в файлы .exe . Благодаря этому ваш проект на Python будет работать как десктопное приложение и вы сможете запускать приложение на других машинах без необходимости установки Python.
В этой статье я расскажу, как преобразовать проект на Python в исполняемый файл. Решение будет работать вне зависимости от количества файлов .py в приложении. Стоит учесть, что Auto PY to EXE работает только с Python 3.5 или выше.
Установка Auto PY to EXE
Установка через pip
При помощи следующей команды можно установить текущую версию Auto PY to EXE.
$ pip install auto-py-to-exe
Установка с GitHub
Также можно выполнить установку напрямую с GitHub. Для установки Auto PY to EXE с GitHub необходимо сначала клонировать репозиторий GitHub.
$ git clone https://github.com/brentvollebregt/auto-py-to-exe.git
Затем нужно перейти в папку auto-py-to-exe .
$ cd auto-py-to-exe
Теперь необходимо запустить файл setup.py .
$ python setup.py install
Можно также проверить версию при помощи следующей команды:
auto-py-to-exe --version

Проверяем версию
Текущая версия Auto PY to EXE 2.9.0 и теперь она установлена на ваш компьютер.
Открываем приложение
Чтобы открыть Auto PY to EXE, нужно выполнить в терминале следующую команду:
$ auto-py-to-exe
Откроется удобное приложение с GUI:

Интерфейс пользователя Auto PY to EXE
Теперь с помощью этого интерфейса можно преобразовать файл .py в .exe .
Процесс преобразования
Шаг 1. Добавляем местоположение файла
Для преобразования .py в .exe сначала необходимо указать путь к файлу Python. Достаточно перейти к местоположению файла, который нужно преобразовать, а затем добавить путь.

Добавляем местоположение файла
Я добавил местоположение основного файла Python моего проекта. Здесь я использую для примера один из своих проектов на Python. Это приложение с GUI, визуализирующее различные алгоритмы сортировки. О создании этого проекта можно прочитать здесь: Build a Sorting Algorithm Visualizer in Python
Шаг 2. Выбор «One Directory» или «One File»
В интерфейсе есть опция выбора «One Directory» или «One File». Мой проект на Python содержит несколько других файлов, поэтому я выбрал «One Directory». Эта опция создаст папку со всеми необходимыми файлами, а также с файлом .exe .

One directory или One file
Шаг 3. Выбор «Console Based» или «Window Based»
После этого нужно будет выбрать тип приложения: консольное (Console Based) или оконное (Window Based). Если выбрать «Window Based», то это скроет весь консольный вывод приложения. Если ваш проект генерирует консольный вывод, то нужно выбрать «Console Based». Если у вас приложение с GUI или вам не нужно отображать пользователю консольный вывод, то выберите «Window Based». Я выбрал второй вариант, потому что моё приложение имеет GUI.

Console Based или Window Based
Шаг 4. Преобразование
Далее отобразятся другие опции, такие как добавление значков, дополнительных файлов и т.д. Выберите нужные опции самостоятельно. Ну а наш файл .py уже к преобразованию. Достаточно нажать на кнопку CONVERT .PY TO .EXE .

Нажмите кнопку для преобразования
Для завершения процесса придётся немного подождать.
Папка с результатами
После завершения процесса можно будет выбрать опцию открытия папки с результатами.

По умолчанию папка с результатами будет создана там, откуда вы запускали Auto PY to EXE. Я открывал Auto PY to EXE с рабочего стола, поэтому папка создана на нём. В папке находится множество файлов и папок. Но нам важен файл с расширением .exe . В моём случае это main.exe . При двойном нажатии будет запускаться программа.
Готово! Наш проект на Python теперь преобразован в исполняемый файл. Его можно запускать на других компьютерах без необходимости установки Python.
Ресурсы
- https://pypi.org/project/auto-py-to-exe/
- https://github.com/brentvollebregt/auto-py-to-exe
На правах рекламы
Серверы для всех, в том числе, и для разработчиков! VDS с посуточной оплатой на базе новейших процессоров AMD EPYC и хранилища на основе NVMe дисков от Intel для размещения проектов любой сложности, создавайте собственную конфигурацию сервера в пару кликов!




