Найти в Дзене
АйТи Ниндзя

Как запаковать приложение на Python в .exe файл

Каждый новичок, изучающий пайтон сталкивается с проблемой упаковки своей программы в единый исполняемый файл. — Я создал приложение на python и хочу его отправить другу, как мне это сделать? Ведь у него в компьютере он не установлен. Поскольку пайтон интерпретируемый язык программирования скомпилировать его в единый файл проблематично. Но не невозможно. Для решения этой проблемы пайтон-разработчики идут на хитрость: в пакет программы "копируют" интерпретатор пайтон. Однако сделать это нужно правильно. И для этой цели обычно используют либо библиотеку pyinstaller, либо cx_freeze. Pyinstaller позволяет упаковать программу чуть ли не в 2 клика. Однако если у вас есть дополнительные файлы, либо вы импортировали дополнительные библиотеки, скорее всего, pyinstaller не сможет их найти и у вас ничего не получится. Поэтому я советую для сложных приложений использовать cx_freeze. И сразу скажу, все не так страшно, как может показаться. Мне удавалось запаковать игры с музыкой, картинкам
Оглавление

Каждый новичок, изучающий пайтон сталкивается с проблемой упаковки своей программы в единый исполняемый файл.

— Я создал приложение на python и хочу его отправить другу, как мне это сделать? Ведь у него в компьютере он не установлен.

Поскольку пайтон интерпретируемый язык программирования скомпилировать его в единый файл проблематично. Но не невозможно.

Для решения этой проблемы пайтон-разработчики идут на хитрость: в пакет программы "копируют" интерпретатор пайтон. Однако сделать это нужно правильно. И для этой цели обычно используют либо библиотеку pyinstaller, либо cx_freeze.

Pyinstaller позволяет упаковать программу чуть ли не в 2 клика. Однако если у вас есть дополнительные файлы, либо вы импортировали дополнительные библиотеки, скорее всего, pyinstaller не сможет их найти и у вас ничего не получится.

Поэтому я советую для сложных приложений использовать cx_freeze. И сразу скажу, все не так страшно, как может показаться. Мне удавалось запаковать игры с музыкой, картинками и все работало. Работаю я в Windows, а документацию библиотеки смотри здесь.

Итак начнем.

Шаг 1.Установка библиотеки cx_Freeze

Устанавливаем библиотеку cx_Freeze с помощью pip.

Вводим в командной строке:

pip install cx_freeze

Если появляется ошибка, то попробуйте добавить флаг --user.

pip install cx_freeze --user

Шаг 2. Напишем код, который запакует нашу программу.

В пакете нашей программы создаем файл с названием setup.py, в которую вписываем код, который запакует нашу программу. У меня была игра, и код компилятора выглядел так:

from cx_Freeze import setup, Executable

executables = [Executable(
'main.py',
targetName=
'My_game.exe',
base=
'Win32GUI',
icon=
'log.ico')]


includes = [
'pygame', 'pygame_menu', 'os']

zip_include_packages = [
'pygame', 'pygame_menu', 'os' ]

include_files = [
'FreeSansBold.ttf',
'menu.py',
'music.mp3',
'player.py',
'pyganim.py']

options = {
'build_exe': {
'include_msvcr': True,
'includes': includes,
'zip_include_packages': zip_include_packages,
'build_exe': 'build_windows',
'include_files': include_files,
}
}

setup(name=
' main',
version=
'0.0.3',
description=
'My app',
executables=executables,
options=options)

Шаг 3. Корректируем код

А теперь разберем, как исправить этот код под себя.

В третьей строке вписываем название файла, запускающего программу и название итогового файла exe.

executables = [Executable('ИМЯ ВАШЕГО ФАЙЛА', targetName='НАЗВАНИЕ ВАШЕГО ПРИЛОЖЕНИЯ.exe',
base='Win32GUI', /эта строка нужна для того,  чтобы при запуске приложения командная строка не открывалась. На этапе разработки ее стоит удалить, чтобы увидеть ошибки. Убедившись, что запакованный файл работает, снова добавьте эту строку.
icon='ИКОНКА.ico')] /создайте иконку приложения и конвертируйте в формат ico

Конвертировать иконку можно здесь.

В includes и zip_include_packages мы указываем те модули, которые мы использовали, чтобы python не забыл их запаковать.

includes = [...]
zip_include_packages = [...]

В include_files мы указываем путь ко всем дополнительным файлам, которое использует наше приложение. Если у вас иерархия папок, а не все файлы скопом лежат в одной, то не забудьте в пути это указать.

В функции options ничего не исправляем.

В setup исправляем name - указываем имя главного файла, в version - версию приложения, а в description - описание приложения.

Ошибка с шрифтами

Если у вас используются шрифты в приложении, то, скорее всего, вылезет ошибка, поскольку cx_Freeze не включает их в пакет. Мой выход из ситуации: скачать нужный шрифт из интернета и файл .ttf добавить непосредственно в проект. При этом в своем проекте нужно исправить код загрузки шрифта.

FONT = "НАЗВАНИЕ_ШРИФТА.ttf"

Шаг 3. Запаковываем.

Выполним запаковку, вбив в командную строку следующее:

python setup.py build

У вас должен появиться файл build_windows. Это и есть наш итоговый пакет программы, который мы сможем распространять. Здесь же мы найдем файл .exe, запускающий нашу программу. Для него, например, можно создать ярлык и закинуть его на рабочий стол.

Возможные ошибки.

Если .exe файл выдает ошибку, то скорее всего, вы не указали, либо указали неправильно путь до одного из используемых файлов и программа не может его найти. Этот файл будет указан в ошибке.

Надеюсь у вас все получилось, а если нет, обязательно напишите об этом. И я постараюсь вам помочь.

И не забудьте подписаться на наш телеграм-канал.