Первый вариант предоставляет красивый графический интерфейс пользователя (GUI), который позаботится обо всем, что необходимо для преобразования сценария Python в исполняемый файл.
Как скомпилировать python в exe файл без консоли
В этом руководстве показано, как использовать Py2Exe для преобразования сценария Python в исполняемый файл в Windows.
Вступление
Для выполнения сценариев Python существует множество предварительных условий, таких как установка Python, установка нескольких модулей, использование командной строки и т.д. Например, если вы запускаете файл .exe, все очень просто.
Если вы хотите создать простое приложение и распространить его среди большого числа пользователей, его несложно написать в виде короткого сценария Python, но это требует, чтобы пользователи знали, как запустить сценарий, и чтобы Python уже был установлен на их компьютере.
Примеры, подобные этому, показывают, что есть веская причина для преобразования .py программ в их .exe аналоги в Windows. .exe означает «исполняемый файл», который также известен как двоичный файл.
Наиболее популярным способом достижения этой цели является использование модуля py2exe. В этой статье мы кратко обсудим основы работы с py2exe и устраним некоторые распространенные проблемы. Для этого не требуется углубленного знания Python, но вам потребуется использовать Windows.
Преобразование кода интерпретируемого языка в исполняемый код — это практика, обычно называемая замораживанием.
Установка py2exe
Чтобы использовать модуль py2exe, нам необходимо установить его. Мы делаем это с помощью трубопровода:
Преобразование скрипта Python в файл .exe
Давайте сначала напишем программу, которая печатает текст на консоли:
Давайте выполним следующие команды в командной строке Windows, чтобы создать каталог (пример), переместить уже написанный код в указанный каталог и, наконец, запустить его:
Это должно быть выведено:
Всегда проверяйте скрипты перед преобразованием их в исполняемые файлы, чтобы убедиться, что любая ошибка не связана с исходным кодом.
Конфигурация и настройка
Создайте еще один файл с именем setup.py в той же папке. Здесь мы записываем детали конфигурации того, как должна быть скомпилирована наша программа. Теперь добавим несколько строк кода:
Если бы мы имели дело с приложением с графическим интерфейсом, мы бы заменили консоль окнами, подобными этому:
Теперь откройте командную строку от имени администратора, перейдите в указанный каталог и запустите файл setup.py:
Быстрый скоросшиватель
Если вы все сделали правильно, должен быть создан подкаталог dist. В нем, в зависимости от программы, находятся различные файлы, одним из которых должен быть example.exe. Чтобы запустить его из консоли, выполните его:
И вас встретит наш латинский фрагмент, за которым следует значение 4!
Или вы можете дважды щелкнуть по нему, и он запустится на консоли.
Если вы хотите объединить все файлы, как bundle_files, так и сжатые, и установить для zipfile значение None, здесь:
И снова запустите команды, чтобы создать файл .exe.
Теперь ваши конечные пользователи могут запускать ваши сценарии на своих локальных компьютерах без каких-либо знаний или предварительных условий.
Диагностика
Ошибки при конвертировании .py файлов в .exe файлы встречаются довольно часто, поэтому мы перечислим некоторые распространенные ошибки и их решения.
Как собрать код python в exe без отображения консоли?
Как собрать код python в exe без отображения консоли?
- установите pininstaller: pip install pyinstaller
- Пишем команду pyinstalle r-F — w-i( для создания иконки в .exe) main.py, где main.py — Python-скрипт. Вот что означает каждый флаг: f — этот флаг отвечает за то, чтобы созданная папка dist, в которой будет храниться наш исполняемый файл, не содержала много ненужных файлов, модулей и т.д. -w — этот флаг необходим, если ваше приложение использует библиотеки GUI (tkinter, PyQt5 и т.д.). ), он блокирует создание консольного окна, если ваше приложение является консольным, вам не нужно использовать этот флаг. -i — этот флаг отвечает за установку иконки в наш исполняемый файл, после него нужно указать полный путь к иконке и ее имя. Например: D:\LayOut\icon.ico
В&#D:³ Files: D:³³; ещё ищете ответ? Посмотрите другие вопросы с метками python или задайте свой вопрос.
Дизайн сайта / логотип ©2021;Stack Exchange Inc; Пользовательский контент предоставляется по лицензии cc by-sa. rev 2021.11.26.40833
Нажав кнопку «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange будет хранить файлы cookie на вашем устройстве и делиться информацией в соответствии с нашей политикой использования файлов cookie.
Преобразуем проект на Python в исполняемый файл .EXE
Auto PY to EXE позволяет легко конвертировать файлы .py в файлы .exe. Это запустит программу Python как настольное приложение и позволит вам запускать приложение на других компьютерах без необходимости установки Python.
В этой статье объясняется, как преобразовать проект Python в исполняемый файл. Решение работает независимо от количества .py файлов в приложении. Обратите внимание, что Auto PY to EXE работает только с Python 3.5 или выше.
Что здесь интересного? Во-первых, некоторые компоненты не используются (например, ssl, pyqt3D и т.д.). Во-вторых, мы будем собирать наш exe на Linux (linux-64, если быть точным; в нашем случае нам не нужно указывать платформу перед каждым компонентом).
Создание exe файла с помощью PyInstaller
PyInstaller собирает приложение Python и все необходимые библиотеки в один пакет следующим образом:
- Считывает файл сценария.
- Он анализирует код для выявления любых зависимостей, которые необходимы для работы кода.
- Создает файл spec, содержащий имя скрипта, библиотеки зависимостей и все файлы, включая те, которые переданы PyInstaller.
- Он собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
- Создает папку BUILD в папке сценария и записывает журналы в BUILD вместе с рабочими файлами.
- Создает папку DIST в папке скрипта, если она еще не существует.
- Записывает все необходимые файлы вместе со скриптом либо в ту же папку, либо в один исполняемый файл.
Если при создании исполняемого файла вы используете параметр команды onedir ил и-D, все будет помещено в одну и ту же папку. Это поведение по умолчанию. Если вы используете параметр onefile ил и-F, все будет храниться в одном исполняемом файле.
Ниже приведен простой сценарий Python под названием simple.py, который содержит этот код.
Создайте один исполняемый файл. Введите в командную строку:
После установки появляются две папки, BUILD и DIST, и новый файл с расширением .spec. Файл spec имеет то же имя, что и файл сценария.
Python создает каталог дистрибутива, который содержит основной исполняемый файл и все динамические библиотеки.
Это происходит после выполнения файла.
Открыв файл спецификации, вы также можете увидеть раздел datas, который указывает, что файл netflix_titles.csv скопирован в текущий каталог.
Запустите файл simple1.exe. Появляется консоль со следующим выводом: Всего фильмов: 7787 .
Добавление файлов с данными и параметр onefile
Если указано —onefile, PyInstaller извлекает все файлы из папки TEMP, запускает скрипт и удаляет TEMP. Если вы укажете onefile вместе с add-data, он считывает данные из папки. Путь к папке изменится на путь «_MEIxxxxx-folder».
Сценарий обновляется для чтения папки TEMP и файлов данных. Создайте exe-файл с помощью команд onefile и add-data.
После успешного создания в папке DIST появится файл simple1.exe.
Скопируйте исполняемый файл на рабочий стол и запустите его, чтобы убедиться в отсутствии ошибки, связанной с отсутствующим файлом.
Дополнительные импорты с помощью Hidden Imports
Исполняемый файл требует всех входных данных, которые необходимы сценарию Python. Иногда PyInstaller пропускает динамический импорт или импорт второго уровня и выдает ImportError: No module named ……
Чтобы исправить эту ошибку, укажите имя отсутствующей библиотеки в файле hidden-import.
Например, чтобы добавить библиотеку os, нужно написать следующее:
Файл spec
Файл spec — это первый файл, который PyInstaller создает для кодирования содержимого сценария Python вместе с параметрами, которые передаются при запуске.
PyInstaller читает содержимое файла для создания исполняемого файла и определяет все необходимое для этого.
Файл с расширением .spec по умолчанию хранится в текущем каталоге.
Если у вас есть одно из следующих требований, вы можете изменить файл спецификации:
- Компиляция в пакет с исполняемым файлом данных.
- Включите другие исполняемые файлы: .dll или .so.
- Используйте библиотеки для создания нескольких программ в одном пакете.
Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.
Скомпилируйте модель с помощью PyInstaller:
После успешной компиляции запустите исполняемый файл, который выдаст следующее сообщение об ошибке.
Давайте устраним проблему, обновив файл спецификации. Одним из решений является создание файла спецификации.
Команда pyi-makespec создает стандартный файл spec, содержащий все параметры, которые могут быть указаны в командной строке. В текущем каталоге создается файл simpleModel.spec.
Поскольку был использован параметр —onefile, в файл будет включена только секция exe.
Если использовался параметр default или onedir, то в дополнение к разделу exe будет раздел collect.
Вы можете открыть файл simpleModel.spec и добавить следующий текст для создания крючков.
Создайте крючки и добавьте их в раздел Скрытый импорт и данные.
Файлы хуков расширяют возможности PyInstaller для удовлетворения таких требований, как необходимость включения дополнительных данных или импорта динамических библиотек.
Обычно пакеты Python используют обычные методы для импорта своих зависимостей, но в некоторых случаях, таких как TensorFlow, необходимо импортировать динамические библиотеки. Возможно, PyInstaller не нашел все библиотеки или их слишком много. В таком случае рекомендуется использовать утилиту импорта PyInstaller.utils.hooks и создать все подмодули для библиотеки.
Скомпилируйте модель после обновления файла simpleModel.spec.
Скопируем исполняемый файл на рабочий стол и увидим, что теперь версия TensorFlow отображается корректно.
Месторасположение. Опять же, мы не будем вдаваться в подробности, отдельные пути описаны здесь. Если вы следовали этой статье (составной sysroot находится здесь, рядом с main.pdy ), то вам не нужно ничего здесь менять.
Структура программы
В качестве примера возьмем проект со следующей структурой: main.py является «точкой входа» нашей программы, он вызывает mainwindow.py — допустим, он проектирует окно виджета и получает icon.png и mainwindow.ui из ресурсов, которые мы создали с помощью Qt Designer. Доступные зависимости, версии библиотек и другие необходимые вещи показываются по очереди:
Как упоминалось ранее, на этом этапе мы собираем все необходимые части, которые затем используются для создания исполняемого файла. Этот процесс осуществляется с помощью конфигурационного файла sysroot.json (в принципе, вы можете назвать этот файл как угодно и указать путь к нему). Он состоит из блоков, каждый из которых описывает, как собрать другой компонент (Python, Qt и т.д.). API pyqtdeploy позволяет вам написать свой собственный плагин, который управляет созданием библиотеки/модуля/чего угодно, что вам нужно, если это еще не реализовано разработчиками pyqtdeploy. Давайте рассмотрим типичные дополнения и их параметры (примеры из документации):
openssl (опционально) — позволяет собирать из исходников или использовать библиотеку, установленную в вашей системе (подробности). Компонент, описывающий это дополнение в файле sysroot.json, выглядит следующим образом:
Первое, что бросается в глаза, это синтаксис: arch1|arch2|. #Это означает, что мы можем выбрать, на какой платформе использовать этот плагин (ios, android, macos, win, linux), а на какой нет. Кроме того, этот синтаксис применяется и к параметрам внутри блока.
- source (обязательный) — Имя исходного файла,
- no_asm (не требуется) — отключить оптимизацию ассемблера. Если эта опция включена, nasm должен быть указан в PATH,
- python_source (необязательно) — имя файла, содержащего патчи, необходимые для сборки OpenSSL на macOS для Python v3.6.4 и более ранних версий,
zlib (необязательно) — используется при сборке других компонентов (если не указано, предполагается, что используется компонент, установленный в системе) (подробности):
- source (обязательный) — очевидно, имя исходного файла,
- static_msvc_runtime (необязательно) — статическое связывание библиотек MSVC (Windows),
qt5 (обязательно) — понято здесь (подробности):
- qt_dir (необязательно, если указан источник) — путь к папке с установленным Qt,
- source (необязательно, если указан qt_dir) — имя исходного файла Qt,
- edition (обязательный, если указан source) — один из 2 вариантов:
- реклама,
- Открытый источник,
- openssl-linked — собран из исходного кода (подробности должны быть указаны в описании компонента openssl),
- securetransport — использует SSL, как реализовано в Qt (который, в свою очередь, использует Secure Transport от Apple),
- openssl-runtime — использует версию OpenSSL, установленную в системе,
python (обязательно) — это тоже само собой разумеется (подробности):
- build_host_from_source (обязательно) — true — собирать python для хоста из исходников, false — использовать установленный python (не поддерживается для win32),
- build_target_from_source (required) — true — собирать Python для целевой платформы из исходников, false — использовать установленный Python (использование установленного Python поддерживается только на win32),
- source (требуется при сборке Python из исходного текста) — имя исходного файла Python,
- version (требуется, если используется установленный Python) — версия установленного Python,
- dynamic_loading (необязательно) — true — включает поддержку динамической загрузки модулей расширения (на языке C),
- host_installation_bin_dir (опционально) — путь к установленному Python, если он не создан из исходников (если не указан, то будет автоматически искаться в реестре на win, в PATH на других платформах),
Собираем sysroot
Давайте посмотрим на полученный sysroot.json для нашей программы:
Что здесь интересного? Во-первых, некоторые компоненты не используются (например, ssl, pyqt3D и т.д.). Во-вторых, мы будем собирать наш exe на Linux (linux-64, если быть точным; в нашем случае нам не нужно указывать платформу перед каждым компонентом).
Более того, в qt5 мы отключили как можно больше модулей и функций, которые не используются (те, о назначении которых я знаю хотя бы минимально). Из каталогов верхнего уровня был создан только QtBase. Первый уменьшает размер встроенного Qt и соответственно результирующего файла (у меня получается минус 5 Мб), но увеличивает время компиляции, второй — использование ccache (по крайней мере в Linux), что при повторных компиляциях уменьшает время ОЧЕНЬ значительно (у меня уменьшилось в 5 раз). Он не требует настройки, просто установите его с помощью apt install ccache .
В pyqt5 вы собираете только модули QtCore, QtGui, QtWidgets.
В python dynamic_loading включена, потому что мы хотим динамически включить расширение C позже.
Прежде чем приступить к компиляции sysroot, не забудьте скачать все необходимые исходники: zlib, Qt5, Python, sip, PyQt5 и поместить их в папку с файлом sysroot.json (можно использовать и другой, тогда укажите путь к нему). Запустите сборку:
У этой команды есть еще несколько опций, которые вы можете посмотреть здесь.
Я настоятельно рекомендую использовать опцию —verbose, так как вы можете ожидать множество ошибок до успешного завершения сборки. Многие из этих проблем связаны с тем, что у вас не установлены пакеты разработки. Я не буду перечислять их здесь, поскольку они зависят от вашей конфигурации и платформы. Вам, вероятно, понадобится python3-dev, см. также здесь (особенно раздел требований). Но вы можете использовать уже установленные версии для Qt и Python (я не тестировал это, возможно, у этого есть свои подводные камни).
И ешьте попкорн, потому что в зависимости от того, насколько мощный у вас компьютер, это может занять много времени.
Создаем «проектный» файл (документация)
Когда у вас есть все необходимое, выберите модули, которые вы хотите поместить в exe-файл. В pyqtdeploy есть удобная GUI-помощь. Запустите его (вы можете использовать любое имя файла .pdy):
На первой вкладке вы найдете следующие настройки:
- Имя — имя будущего exe-файла,
- Файл главного скрипта (не требуется, если используется Entry Point) — скрипт, который будет использоваться для запуска приложения (в нашем случае main.py),
- точка входа (не указывается, если используется основной файл скрипта) — точка входа для программы на основе setuptools,
- sys.path — используется для указания дополнительных каталогов, zip-файлов и яиц (те самые яйца Python) для добавления в sys.path (я не использовал его, подробности об этой опции см. в документации),
- Target Python version — Версия Python,
- Версия PyQt — PyQt4 или PyQt5 (игнорируется, если вы мазохист и решили создать программу, не использующую PyQt с этим монстром),
- Использование консоли — выберите, должно ли приложение использовать консоль (только для Windows). Это может быть полезно для отладки,
- Пакет приложений — выберите, следует ли создавать приложение в виде пакета (только для macOS),
- Каталог пакета приложения — содержит все файлы, составляющие вашу программу. Чтобы добавить их, нажмите кнопку Сканировать…. Папка со всеми «внутренностями» (src) находится отдельно от main.py. Выберите эту папку и отметьте галочками все файлы, которые вы хотите включить в конечный файл. Если у вас нет такого разделения (т.е. main.py находится внутри src ), снимите флажок с main.py (или аналогичного файла главного скрипта).
Еще один момент: любой файл с расширением .py будет «заморожен» (будет сгенерирован байткод) — в некоторых случаях это может быть нежелательно.
- Сканирование… — добавление файлов в каталог пакета приложений,
- Удалить все — очистка каталога пакетов приложений,
- Включить все — выбирает все файлы в каталоге пакета приложения,
- Удалить все — отменяет выбор всех файлов в каталоге пакета приложения,
- Исключения — шаблоны для исключения файлов из каталога пакета приложения. Дважды щелкните на пустой строке, чтобы добавить ее,
Поскольку qmake участвует в создании, вы можете добавить дополнительные опции для него здесь (я не использовал его),
На этой вкладке мы выбираем все модули PyQt, которые мы хотим явно импортировать в нашу программу. Если они зависят от других модулей, они будут выбраны автоматически. В нашем случае мы использовали QtCore, QtGui, QtWidgets, uic; sip подбирается автоматически. Если вы планируете использовать уже предустановленный PyQt и не привязываете его статически к нашему исполняемому файлу, не назначайте ничего (этот сценарий не тестировался).
Стандартная библиотека. Мы следуем тому же подходу, что и в предыдущем разделе, только для стандартной библиотеки. Если вы явно импортировали модуль в свою программу, проверьте его. Если вам нужны другие модули (или сам интерпретатор), они будут выбраны автоматически (ячейки).