Компиляция программы на python 3 в exe с помощью программы cx_Freeze
Наверняка, у каждого Python-программиста возникало непреодолимое желание, а изредка и реальная потребность, скомпилировать свою программу на python в exe файл. Сегодня я расскажу, как это сделать с помощью программы cx_Freeze.
Вопрос 1: а оно надо?
Прежде, чем начинать компилировать программу, нужно убедиться, что это действительно необходимо.
Поэтому, если вы будете использовать программу сами или на компьютерах тех, кто её будет использовать, будет стоять интерпретатор 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 — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода.
Хочется отметить, что для меня Python является одним из самых интересных, мощных языков программирования. С ним я познакомился примерно в 2016 году и только спустя год осознал всю его мощь и красоту.
pip – система управления пакетами, которая используется для установки и управления программными пакетами, которые написаны на Python. Если кратко, то pip – это файловый менеджер языка Python.
pyinstaller – программа, которая собирает все зависимости и python-приложение в один пакет и превращает его в исполняемый файл для Windows, Linux, MacOS.
Для начала, нам нужно установить pyinstaller с помощью pip. Пишем команду в командной строке:
Если вы используете Linux и у вас не установлен pip, то просто напишите команду:
На Windows, если вы не изменяли конфигурации установки Python, проблемы отсутствия pip у вас возникнуть не должно.
Вторым шагом будет переход в директорию с нашим проектом. Просто копируем путь и с помощью команды cd (наш путь) переходим в директорию, для Linux и Windows команда одинаковая.
Сделаем мы это с помощью установленного пакета pyinstaller.
Давайте разберем каждый флаг, они не обязательно все вам понадобятся.
Так же подписывайтесь на обновления сайта, тут будет ещё много интересного!
Как создать exe файл для Python кода с помощью PyInstaller
Установка PyInstaller
Установка PyInstaller не отличается от установки любой другой библиотеки Python.
Вот так можно проверить версию PyInstaller.
Я использую PyInstaller версии 4.2.
Создание exe файла с помощью PyInstaller
PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:
Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.
Создадим один исполняемый файл. В командной строке введите:
Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.
Вот что произойдет после запуска файла.
Добавление файлов с данными, которые будут использоваться exe-файлом
Есть CSV-файл netflix_titles.csv, и Python-script, который считывает количество записей в нем. Теперь нужно добавить этот файл в бандл с исполняемым файлом. Файл Python-скрипта назовем просто simple1.py.
Создадим исполняемый файл с данными в папке.
Можно увидеть, что файл теперь добавляется в папку DIST вместе с исполняемым файлом.
Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.
Добавление файлов с данными и параметр onefile
Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.
После успешного создания файл simple1.exe появится в папке DIST.
Можно скопировать исполняемый файл на рабочий стол и запустить, чтобы убедиться, что нет никакой ошибки, связанной с отсутствием файла.
Дополнительные импорты с помощью Hidden Imports
Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named …
Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.
Например, чтобы добавить библиотеку os, нужно написать вот так:
Файл spec
Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.
PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.
Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:
Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.
Компилируем модель с помощью PyInstaller:
После успешной компиляции запускаем исполняемый файл, который возвращает следующую ошибку.
Исправим ее, обновив файл spec. Одно из решений — создать файл spec.
Команда pyi-makespec создает spec-файл по умолчанию, содержащий все параметры, которые можно указать в командной строке. Файл simpleModel.spec создается в текущей директории.
Если использовать параметр по умолчанию или onedir, то вместе с exe-разделом будет также и раздел collect.
Можно открыть simpleModel.spec и добавить следующий текст для создания хуков.
Создаем хуки и добавляем их в hidden imports и раздел данных.
Файлы хуков расширяют возможность PyInstaller обрабатывать такие требования, как необходимость включать дополнительные данные или импортировать динамические библиотеки.
Обычно пакеты Python используют нормальные методы для импорта своих зависимостей, но в отдельных случаях, как например TensorFlow, существует необходимость импорта динамических библиотек. PyInstaller не может найти все библиотеки, или же их может быть слишком много. В таком случае рекомендуется использовать вспомогательный инструмент для импорта из PyInstaller.utils.hooks и собрать все подмодули для библиотеки.
Скомпилируем модель после обновления файла simpleModel.spec.
Скопируем исполняемый файл на рабочий стол и увидим, что теперь он корректно отображает версию TensorFlow.
Вывод:
PyInstaller предлагает несколько вариантов создания простых и сложных исполняемых файлов из Python-скриптов:
Компилируем код Python в файл exe
Код, написанный на Python, позволяет решать много прикладных задач: автоматизация отчетности, алгоритмы поиска, анализа и пр. Однако не у всех потенциальных пользователей может быть установлен сам Python и тем более не все являются экспертами в программировании. Выручить может программа, которая будет отрабатывать написанный вами код без установки библиотек Python и необходимой оболочки. Одним из таких решений может быть компиляция кода Python а файл exe. Дальше простым языком мы постараемся объяснить, как его скомпилировать и какие есть нюансы.
Для начала Вам необходимо скачать компилятор pyinstaller, для чего вам понадобится команда:
Далее ваш код в формате. py необходимо разместить в системную папку Scripts.
Путь к этой папке обычно выглядит так:
Если Вы инсталлировали Python в другое место, соответственно ищите папку там.
Далее приступаем собственно к компиляции, для чего: выделяем путь к папке Scripts в окне браузера, вместо него набираем команду cmd и жмем Enter.
У Вас сразу будет указан верный путь к файлу:
В продолжение строки с директорией файла необходимо набрать команду: pyinstaller Report.py —onefile
Где Report.py – это имя вашего файла, — onefile – означает, что программа будет скомпилирована в единый файл.
Нажимаем Enter. Pyinstaller приступает к сборке программы.
В зависимости от размера кода и количества, используемых в нем библиотек, время сборки программы может занять 5-15 мин. Успешностью завершения будет являться следующее сообщение:
Готовый файл находим в папке dist.
Данный метод компиляции не оптимизирует включение только необходимых библиотек, поэтому нужно быть готовым к тому, что его размер будет занимать достаточно объема. В нашем случае код из 120 строк с библиотекой Pandas и Datetime собран в программу весом почти 220 Mb. Теперь данным файлом может пользоваться любой сотрудник.
Хотелось бы обратить внимание на следующие нюансы: если вы компилируете файл на 64 битной OS Windows 10, то он не запустится на 32 битной OS Windows 7.
Если же файл будет скомпилирован на 32 битной OS Windows 7, то его можно будет запустить как на 32 битных, так и на 64 битных OS Windows 7/10.
Делаем первое простое программное обеспечение на Python
Введение в GUI
То есть вы могли бы запустить программу из командной строки и получить результат в том же самом виде. Но чтобы ваш код взаимодействовал с пользователем, необходим интерфейс для взаимодействия.
В этом уроке я собираюсь использовать Tkinter. Удобная вещь в Python состоит в том, что вы можете импортировать другие файлы в свой файл. Точно также нужно импортировать Tkinter, аналогично #include в C.
Создаем собственный калькулятор
Выше мы увидели простой графический интерфейс с кнопкой и полями. Приступим к созданию простого калькулятора Python.
Сразу скажу, что стиль кода, названия переменных очень важны и существует n-способов создания кода, но здесь мы только хотим понять суть создания ПО, а не выучить все правила правильного написания кода.
Создание GUI
Прежде чем перейти к коду, мы создадим графический интерфейс для нашего приложения-калькулятора. Для более легкого понимания мы будем использовать только одну кнопку и 4 строчки для ввода.
Воспользуемся написанным кодом выше и возьмем оттуда label, entry и button.
Создание функции
В нашем случае сразу после ввода 2 чисел и указания операции между ними должен быть показан ответ.
Начнем с кнопки Submit (см. изображение калькулятора выше).
Нам нужно дать команду кнопке, создать функцию, которая предназначена для этого.
Называем функцию process, которая после нажатия кнопки, простыми словами, обращается за данными к нашим строкам ввода и получает значения, введенные пользователем. Полученные данные мы сохраняем в number1, number2, operator.
Процесс вычислений
На этом этапе нам нужно обработать ввод, полученный от пользователя. По умолчанию полученное значение является строкой.
Для того, чтобы преобразовать тип данных мы строковую переменную оборачиваем в int.
Строка в Python обозначается как » « или ‘ ‘, то есть здесь в if мы проверяем строковый оператор, полученный от пользователя и сохраняем результат в переменной answer.
Теперь, наконец, нам нужно отправить вывод:
Код целиком будет выглядеть так:
Вы успешно написали код нашего калькулятора.
Обработка исключений
Заголовок звучит слишком техническим? Определенно нет, не переживайте. Мы всегда должны учитывать много разных моментов.
Предположим, вы сделали этот калькулятор и показали его другу. Друг вместо того, чтобы вводить целое число вводит буквы, которые должны быть там где цифры. Python выдает ошибку и сразу останавливается.
Здесь идет процесс обработки исключений Python, также во многих программах и на веб-страницах выдается предупреждение или предупреждающие сообщения.
Обработка исключений считается простым процессом. Давайте посмотрим, как это сделать в нашей программе:
Создание EXE
Чтобы создать исполняемую *.exe версию или Apk (для Android) необходимо «заморозить» (freeze) ваш код.
Есть много способов «заморозить» ваш код, но я бы предложил использовать Pyinstaller.
Шаг 1
Перейдите на сайт pyinstaller.org и установите его. Можно это сделать через pip, а можно скачать Pyinstaller.
Шаг 2
Перейдите в папку, в которой находится код, нажмите SHIFT + правую клавишу мыши и далее «Открыть в командной строке». Т.е. либо «open in command prompt» или «power shell» в зависимости от вашей версии ОС.
Добавляем свой значок для EXE-файла и помещаем всё в один файл с помощью второй команды.
Исходную программу на Python и *.exe файл вы можете скачать ниже:
На этом мы заканчиваем урок по разработке своего первого программного обеспечения на Python.