Python компиляция в exe в windows

Уровень сложностиПростой

Время на прочтение3 мин

Количество просмотров194K

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

Исполняемый файл — это файл, который может быть установлен или запущен на компьютере без использования дополнительного программного обеспечения или библиотек. Он имеет расширение .exe и обычно используется для программных приложений в Windows. Конвертируя свой сценарий Python в исполняемый файл, вы можете защитить свой код от изменения или кражи, облегчить другим людям использование вашей программы и сделать автоматическим выполнение задач.

В этой статье я покажу вам два простых метода конвертации файла Python в исполняемый файл с помощью PyInstaller и auto-py-to-exe. Это две популярные библиотеки Python, которые позволяют создавать автономные исполняемые файлы из скриптов Python. Для работы вам понадобится Python 3.6 или выше.

Способ 1: С помощью библиотеки PyInstaller:

Ссылка

PyInstaller — это библиотека Python, которая может анализировать ваш код и компоновать его с необходимыми модулями и библиотеками в один исполняемый файл. Она поддерживает множество платформ, включая Windows, Linux и Mac OS X. PyInstaller также может обрабатывать сложные случаи, такие как импорт файлов данных, скрытый импорт, приложения с графическим интерфейсом и т.д.

Чтобы использовать PyInstaller, вам нужно сначала установить его с помощью pip:

pip install pyinstaller

Затем вам нужно написать свой скрипт Python и сохранить его с расширением .py. В этом примере я буду использовать простой сценарий, который печатает «Hello World» и сохраняет его под именем hello.py:

print("Hello World")

Далее необходимо открыть командную строку и перейти в каталог, где находится ваш скрипт. Затем необходимо выполнить следующую команду:

pyinstaller hello.py

В результате вы создадите папку dist, содержащая исполняемый файл hello.exe. Вы можете дважды щелкнуть на этом файле, чтобы запустить его или поделиться им с другими.

Если вы хотите создать однофайловый исполняемый файл, не требующий дополнительных файлов или папок, вы можете использовать ключ —onefile:

pyinstaller --onefile hello.py

В папке dist будет создан один файл hello.exe, содержащий все необходимые коды и ресурсы.

Если вы хотите скрыть окно консоли при запуске исполняемого файла, вы можете использовать опцию —noconsole:

pyinstaller --noconsole --onefile hello.py

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

Вы также можете настроить другие аспекты исполняемого файла, такие как иконка, имя, версия и т.д., используя различные опции или создав файл спецификации. За более подробной информацией вы можете обратиться к документации PyInstaller.

Способ 2: С помощью auto-py-to-exe:

Ссылка

auto-py-to-exe — это еще одна библиотека Python, которая может конвертировать скрипты Python в исполняемые файлы. Она основана на PyInstaller, но имеет графический интерфейс для пользователя (GUI), что делает ее более простой в работе. Вы можете просто выбрать свой скрипт, подобрать параметры и нажать кнопку, чтобы сгенерировать исполняемый файл.

Чтобы использовать auto-py-to-exe, вам нужно сначала установить его с помощью pip:

pip install auto-py-to-exe

Затем необходимо выполнить следующую команду для запуска графического интерфейса пользователя:

auto-py-to-exe

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

Здесь вы можете выбрать свой скрипт, нажав на кнопку Browse рядом с Script Location. Вы также можете выбрать, хотите ли вы получить исполняемый файл в одном файле или в одной папке, выбрав One File или One Directory в разделе Output Options.

Вы также можете изменить другие настройки, такие как иконка, имя, окно консоли и т.д., перейдя на вкладку Advanced и изменив поля Additional Files или Window Based Options.

После того как вы закончите с настройками, нажмите на кнопку Convert .py to .exe в нижней части окна. Это запустит процесс преобразования и покажет результат на вкладке Консоль.

После завершения преобразования вы сможете найти исполняемый файл в папке вывода, указанной в разделе Output Options. Вы можете запустить его или поделиться им с другими пользователями.

От редакции

28 августа начнется новый поток по языку программирования Python. На нем мы разберем: Библиотеки Python и решение конкретных задач DevOps; Правила эффективного и поддерживаемого кода; Принципы автоматизации: Docker, Gitlab, Prometheus, K8S и многое другое.

Узнать больше о потоке вы можете на нашем сайте: https://slurm.io/course-python-for-ops

Представьте, что вы написали полезную программу на Python — от удобного скрипта до полноценного приложения. Вы хотите поделиться своим творением с друзьями, коллегами или широкой аудиторией, но тут возникает проблема: не у всех установлен Python, инструкция по работе с кодом может оказаться слишком сложной для пользователей, да и вы можете не захотеть раскрывать свой код. Как же сделать так, чтобы ваш код заработал «из коробки», даже на компьютере человека, который ничего не знает о программировании?

В таких случаях разработчику стоит задуматься о преобразовании своего приложения в исполняемый файл. Такой файл можно легко запустить кликом мышки, и он будет содержать все необходимое для работы программы: библиотеки, зависимости и сам интерпретатор Python. Это обеспечивает работоспособность приложения на любом компьютере, даже если Python на нем не установлен.

На Windows исполняемые файлы имеют формат .exe. Для превращения Python-кода в этот формат существует несколько инструментов. В этой статье мы рассмотрим их и начнем с одного из самых популярных.

PyInstaller

Эта библиотека позволяет достаточно просто создавать исполняемые файлы из исходников. Но прежде чем использовать эту библиотеку, сначала нужно ее установить. Для установки этой и последующих библиотек применяется пакетный менеджер PIP, который берет библиотеки с сервиса PyPI. В современных версиях Python он устанавливается вместе с интерпретатором и сопутствующими компонентами. Так что если в системе уже установлена свежая версия Python, то устанавливать PIP не придется. Для установки PyInstaller нужно ввести в командной строке следующее:

pip install PyInstaller

После ввода нажимаем на клавишу Enter и дожидаемся окончания процесса установки. Для примера возьмем такую простенькую программу:

import random

name = input("Введите ваше имя: ")

list = ["Крепкого вам здоровья!", "Хорошего дня!", "Отличного вам настроения!", "Пусть этот день подарит вам только самые положительные эмоции", "Ты - лучший! Все получится, если захотеть!", "Хорошего настроя и добрых людей вокруг!", "Пусть солнце греет, если не снаружи, то внутри!", "Мир у твоих ног - дерзай, действуй!", "Хорошего утра и приятного дня! Ты один на миллион!", "Побольше сил, а еще бодрости и уверенности в себе!"]

print("Привет, ", name, "! ", random.choice(list), sep="")

Эта программа просит пользователя ввести его имя, а после ввода выводит приветствие в формате «Привет, <имя пользователя>!». К этому приветствию добавляется рандомная фраза-пожелание из списка list. Вот так это выглядит:

Введите ваше имя: Алексей
Привет, Алексей! Пусть солнце греет, если не снаружи, то внутри!

Сохраним исходный код нашего приложения под именем hello.py. Теперь откроем командную строку в той же папке, в которой находится наш исходник. В командной строке напишем:

pyinstaller --onefile hello.py

Опция —onefile означает, что все необходимые файлы и компоненты приложения будут записаны в один исполняемый файл. А если мы перепишем команду таким способом:

pyinstaller --onedir hello.py

то в этом случае будет создана отдельная директория dis, и все файлы, необходимые для работы приложения, будут помещены в нее. Если использовать команду без опций, то есть вот так:

pyinstaller hello.py

то в данном случае по умолчанию будет применена опция —onedir. 

Стоит отметить, что эта библиотека, как и некоторые другие, может создавать исполняемые файлы не только для операционной системы Windows. Если запустить вышеприведенные команды, например, на каком-нибудь дистрибутиве GNU/Linux, то исполняемые файлы будут создаваться именно под эту операционную систему.

py2exe

Еще одна библиотека, которая поможет преобразовать сценарий на Python в исполняемый exe-файл, называется py2exe. Для установки этой библиотеки нужно ввести такую команду:

pip install py2exe

Для примера возьмем ту же программу с выводом приветствия из прошлого раздела. Для запуска процесса конвертации при помощи py2exe нам потребуется создать файл конфигурации. Рядом с файлом hello.py создадим еще один файл с именем setup.py и с таким содержимым:

from distutils.core import setup
import py2exe

setup(console=['hello.py'])

Теперь можно приступать к конвертации. Откроем командную строку в той же директории, в которой находятся наши скрипты, и в ней напишем:

python setup.py py2exe

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

cx_Freeze

Эта библиотека тоже может легко преобразовать любой скрипт на Python в исполняемый exe-файл. Для ее установки в командной строке нужно написать следующее:

pip install cx_Freeze

После установки библиотеки для преобразования того же скрипта hello.py нам также потребуется конфигурационный файл. У нас уже есть один с именем setup.py, предназначенный для py2exe. Заменим его содержимое на это:

import sys
from cx_Freeze import setup, Executable

setup(
    name="Hello",
    version="1.0",
    description="Description of your program",
    executables=[Executable("hello.py")]
)

Далее можно переходить к преобразованию. Действуем примерно так же, как и в прошлом разделе, — открываем командную строку из папки со скриптами и пишем в ней следующее:

python setup.py build

После выполнения этой команды у нас появится папка с именем build, а в ней будет находиться наш исполняемый файл.

Nuitka

Эта библиотека транслирует исходный код на языке Python в код на языке C. Далее этот код преобразуется в исполняемые файлы. Таким образом, для запуска этих файлов не нужен установленный на компьютере пользователя интерпретатор Python. Установить эту библиотеку можно, введя в командной строке следующее:

pip install Nuitka

Для сборки исполняемого файла нужно скомандовать из той же директории, в которой находится скрипт:

nuitka hello.py

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

nuitka --standalone hello.py

Будет создана папка dist, в которую Nuitka поместит все нужные зависимости. А если добавить опцию —onefile:

nuitka --onefile hello.py

то получится один файл, способный работать автономно.

Auto Py to Exe

Этот инструмент предоставляет для пользователя удобный графический интерфейс и использует PyInstaller для преобразования скрипта в exe-файл. Для установки командуем:

pip install auto-py-to-exe

После установки выполняем следующую команду:

auto-py-to-exe

Должно открыться такое окно:

Auto Py to Exe

Источник: автор статьи

Просто указываем путь к файлу со скриптом, отмечаем нужные чекбоксы, выбираем тип приложения (консольное или оконное) и что мы должны получить на выходе (упаковать все в одну папку или в один файл). Также можно указать иконку для приложения и различные дополнительные файлы. Этими файлами могут быть, например, какие-нибудь ресурсы в виде изображений или аудио- и видеофайлы. После всех приготовлений нажимаем на кнопку «Конвертировать .py в .exe».

Начнется процесс конвертации. В разделе «Вывод» будет отображен весь процесс превращения исходника в исполняемый файл. По окончании процесса преобразования в том же каталоге, где находится исходник, будет создана папка Output, в которой мы найдем наш исполняемый файл. Кстати говоря, эту папку можно открыть прямо из интерфейса программы Auto Py to Exe. После завершения конвертации под разделом «Вывод» появится кнопка «Открыть папку вывода».

Py2exe-GUI

Еще один графический инструмент для создания исполняемых файлов из исходников на Python. Так же как и в Auto Py to Exe, здесь используется PyInstaller для преобразования файлов. Для установки нужно скомандовать:

pip install py2exe-gui

Для запуска программы вводим следующую команду:

py2exe-gui

Перед нами должно появиться такое окно:

Источник: автор статьи

Так же как и в случае с Auto Py to Exe, здесь нужно указать расположение скрипта и что желаем получить на выходе (папку или файл). Можно указать версию Python, которую следует использовать при конвертации. Дополнительно есть возможность подключить какие-либо файлы данных или бинарные файлы, если они необходимы для работы приложения. В результате мы получим папку dist, в которой будет содержаться исполняемый файл.

Подведем итог

EXE-файл — это исполняемый файл, который можно запускать на устройствах с Windows без установки Python. Конвертация кода в EXE помогает делиться программами с другими пользователями в удобном виде.

Мы разобрали шесть инструментов для создания EXE-файлов из Python-кода:

  • PyInstaller и Auto Py to Exe — простые и удобные для начинающих.
  • Py2exe и Py2exe-GUI — подойдут для Windows-проектов.
  • Nuitka — мощный инструмент для оптимизации и повышения производительности.
  • cx_Freeze — гибкий вариант для кроссплатформенных приложений.

Каждый инструмент имеет свои особенности. Выбор зависит от сложности проекта, нужной функциональности и ваших предпочтений.

Пройдите тест, узнайте какой профессии подходите

Работать самостоятельно и не зависеть от других

Работать в команде и рассчитывать на помощь коллег

Организовывать и контролировать процесс работы

Введение в компиляцию Python

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

Кинга Идем в IT: пошаговый план для смены профессии

Зачем компилировать 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-приложений. Независимо от выбранного инструмента, важно тщательно тестировать скомпилированные приложения и учитывать все зависимости и ресурсы, чтобы обеспечить их корректную работу на целевых системах.

Читайте также

C помощью Python можно автоматизировать многие задачи — достаточно написать скрипт и запустить его на терминале. Python — самый быстрый и простой язык сценариев. Если вы не хотите каждый день открывать терминал и запускать одну и ту же команду, можно создать исполняемый файл. Создать exe-файл в Python можно с помощью PyInstaller и других библиотек.

Создание exe-файла с помощью библиотеки PyInstaller 

PyInstaller — популярный инструмент для преобразования скриптов Python в автономные исполняемые файлы (.exe) в Windows.

Установка PyInstaller 

PyInstaller доступен в виде обычного пакета Python. Архивы с исходными текстами для выпущенных версий доступны в PyPI, но инструмент проще установить с помощью pip:

C:\> pip install pyinstaller

Это поможет обновить PyInstaller до последней версии:

C:\> pip install —upgrade pyinstaller

Установка текущей версии разработки:

C:\> pip install https://github.com/pyinstaller/pyinstaller/tarball/

Алгоритм действия 

В качестве примера возьмем один файл на Python, чтобы подробно объяснить этапы упаковки. Рассмотрим Python 3.11.0 после установки aspose.cells.

1.Создайте файл с именем example.py: 

import os

from jpype import *

__cells_jar_dir__ = os.path.dirname(__file__)

addClassPath(os.path.join(__cells_jar_dir__, "aspose-cells-23.1.jar"))

addClassPath(os.path.join(__cells_jar_dir__, "bcprov-jdk15on-160.jar"))

addClassPath(os.path.join(__cells_jar_dir__, "bcpkix-jdk15on-1.60.jar"))

addClassPath(os.path.join(__cells_jar_dir__, "JavaClassBridge.jar"))

import jpype

import asposecells

jpype.startJVM()

from asposecells.api import Workbook, FileFormatType, CellsHelper

print(CellsHelper.getVersion())

workbook = Workbook(FileFormatType.XLSX)

workbook.getWorksheets().get(0).getCells().get("A1").putValue("Hello World")

workbook.save("output.xlsx")

jpype.shutdownJVM()

py

2.Создайте папку c:\app и копию example.py c:\app.

3. Откройте командную строку и выполните команду example.py pyinstaller 

C:\app> pyinstaller example.py

4. Скопируйте файлы jar(aspose-cells-xxx.jar, bcprov-jdk15on-160.jar, bcpkix-jdk15on-1.60.jar, JavaClassBridge.jar. Они находятся в папке C:\Python311\Lib\site-packages\asposecells\lib) в c:\app.

5. Отредактируйте файл с суффиксом spec, чтобы добавить раздел данных, подобный example.spec.

6. Запустите pyinstaller example.spec в окне командной строки.

C:\app> pyinstaller example.spec

7. Переключите каталог на C:\app\dist\example, и вы найдете файл example.exe.

Создание exe-файла с помощью библиотеки auto-py-to-exe 

С помощью auto-py-to-exe, проекта Брента Воллебрегта можно создавать собственные исполняемые приложения на Python. Под графическим интерфейсом находится PyInstaller, приложение на базе терминала для создания исполняемых файлов на Python для Windows, Mac и Linux. 

Установка auto-py-to-exe 

  1. Откройте командную строку, выполнив поиск CMD.
  2. Используйте pip-менеджер пакетов Python для установки auto-py-to-exe:

pip install auto-py-to-exe

Алгоритм действия 

  1. Откройте командную строку, выполнив поиск CMD.
  2. Запустите auto-py-to-exe из командной строки.
  3. Нажмите на кнопку Browse и перейдите к нашему примеру файла на Python.
  4. Настройте приложение на использование одного файла. Это позволит объединить приложение и поддерживающие его библиотеки Python в один исполняемый файл.
  5. Настройте приложение на консольное управление. Так можно увидеть все ошибки, выводимые в командную строку. Как только мы будем уверены, что приложение работает правильно, можно настроить его на оконное управление.
  6. Нажмите на раскрывающийся список параметров и выберите значок для вашего приложения. Это необязательный шаг, но он повышает качество приложения. 
  7. Нажмите «Дополнительно», ‎в поле «Имя» ‎введите название вашего приложения. Например, «Программа запуска приложений».
  8. Прокрутите страницу вниз и нажмите «Преобразовать. PY в .EXE»‎, чтобы начать процесс. Это займет пару минут.
  9. Нажмите на кнопку Open Output Folder, чтобы открыть папку, содержащую приложение.
  10. Дважды щелкните по значку, чтобы запустить приложение.

Создание exe-файла с помощью библиотеки cx_Freeze 

Преобразовать скрипт Python в автономный исполняемый файл (.exe) можно и с помощью «cx_Freeze».

Установка cx_Freeze 

Установить его легко с помощью pip:

Алгоритм действия 

Создайте установочный скрипт (например, «setup.py») в том же каталоге, что и ваш скрипт на Python. Этот скрипт предоставит конфигурацию для «cx_Freeze». Простой пример проекта:

from cx_Freeze import setup, Executable

   setup(

       name="YourAppName",

       version="1.0",

       description="Your application description",

       executables=[Executable("your_script.py")],

   )   

py

Замените «YourAppName» и «Your application description» на название и описание вашего приложения, а «your_script.py» — на название вашего скрипта на Python.

Откройте терминал, перейдите в каталог, содержащий ваш скрипт на Python и файл «setup.py»:

python setup.py build

Это создаст каталог «build», содержащий исполняемый файл.

После выполнения команды «build» вы можете найти исполняемый файл в каталоге `build`. Он будет находиться в подкаталоге с названием вашей операционной системы (например, «build\exe.win-amd64-3.8» для 64-разрядного исполняемого файла Windows).

Теперь у вас должен быть отдельный исполняемый файл, который вы можете распространять и запускать на компьютере без установленного Python. Помните, что если у вашего скрипта есть внешние зависимости, то может потребоваться включить их в сценарий «setup.py». 

Создание exe-файла с помощью библиотеки py2exe 

Преобразование интерпретируемого языкового кода в исполняемый файл еще называют замораживанием. Для этого можно использовать модуль py2exe.

Установка py2exe 

Чтобы использовать модуль py2exe, нужно его установить. Сделаем это с помощью pip:

Алгоритм действия 

Напишем программу, которая будет выводить текст на консоль:

import math

print("Hannibal ante Portas")

print(factorial(4))

py

Запустим следующие команды в командной строке Windows, чтобы создать каталог. Переместим код, который мы уже написали в указанный каталог и выполним его:

$ mkdir exampDir

$ move example.py exampDir

$ cd exampDir

$ py example.py

py

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

Создайте другой файл с именем setup.py в той же папке. Здесь мы сохраним подробную информацию о конфигурации, о том, как мы хотим скомпилировать нашу программу. Пока мы просто добавим в него пару строк кода:

from distutils.core import setup # Need this to handle modules

import py2exe 

import math # We have to import all modules used in our program

setup(console=['example.py']) # Calls setup function to indicate that we're dealing with a single console application

py

Теперь откройте командную строку от имени администратора и перейдите в каталог, чтобы запустить файл setup.py:

$ cd exampDir

$ python setup.py py2exe

running py2exe

*** searching for required modules ***

*** parsing results ***

Установка PyInstaller не отличается от установки любой другой библиотеки Python.

pip install PyInstaller

Вот так можно проверить версию PyInstaller.

pyinstaller --version

Я использую PyInstaller версии 4.2.

Создание exe файла с помощью PyInstaller

PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:

  1. Считывает файл скрипта.
  2. Анализирует код для выявления всех зависимостей, необходимых для работы.
  3. Создает файл spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
  4. Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
  5. Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
  6. Создает папку DIST в папке со скриптом, если она еще не существует.
  7. Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.

Если использовать параметр команды 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-файл будет называться так же, как и файл скрипта.

папки, BUILD и DIST, а также файл .spec

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

 исполняемый файл

Вот что произойдет после запуска файла.

Добавление файлов с данными, которые будут использоваться exe-файлом

Есть CSV-файл netflix_titles.csv, и Python-script, который считывает количество записей в нем. Теперь нужно добавить этот файл в бандл с исполняемым файлом. Файл Python-скрипта назовем просто simple1.py.

import time
# pip install pandas
import pandas as pd


def count_records():
    data = pd.read_csv('netflix_titles.csv')
    print("Всего фильмов:", data.shape[0])


if __name__ == "__main__":
    count_records()
    time.sleep(5)

Создадим исполняемый файл с данными в папке.

pyinstaller --add-data "netflix_titles.csv;." simple1.py

Параметр --add-data позволяет добавить файлы с данными, которые нужно сохранить в одном бандле с исполняемым файлом. Этот параметр можно применить много раз.

Синтаксис add-data:

  • add-data <source;destination> — Windows.
  • add-data <source:destination> — Linux.

Можно увидеть, что файл теперь добавляется в папку DIST вместе с исполняемым файлом.

Добавление файлов с данными

Также, открыв 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 позволяет создать исполняемый файл для обработки скрытых импортов и других файлов данных с помощью хуков.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Mac fonts for windows
  • Как установить kmplayer по умолчанию windows 10
  • Windows 11 проверка совместимости microsoft
  • Обновить directx для windows 10 x64 до последней версии
  • Acpi ven aoa dev 2011 driver for windows 10