- Функция compile() компилирует блок кода Python.
- Позволяет скомпилировать блок кода для выполнения в exec().
- Синтаксис:
- Параметры:
- Возвращаемое значение:
- Описание:
- Как скомпилировать Python код в .exe
- Как скомпилировать Python код в .exe | немного теории
- Как скомпилировать Python код в .exe | практикум
- Как создать exe файл для Python кода с помощью PyInstaller
- Установка PyInstaller
- Создание exe файла с помощью PyInstaller
- Добавление файлов с данными, которые будут использоваться exe-файлом
- Добавление файлов с данными и параметр onefile
- Дополнительные импорты с помощью Hidden Imports
- Файл spec
- Вывод:
- Подписывайтесь на канал в Дзене
- Python // Компиляция скриптов в .exe файл
- Python // Компиляция скриптов в .exe файл
Функция compile() компилирует блок кода Python.
Позволяет скомпилировать блок кода для выполнения в exec().
Синтаксис:
Параметры:
- source — обязательный параметр. Может быть обычной строкой, байтовой строкой, либо объектом абстрактного синтаксического дерева.
- filename — обязательный параметр. Имя файла, из которого будет читается код. Если код не будет считан из файла, вы можете написать в качестве параметра любую строку .
- mode — обязательный параметр. Может принимать 3 значения:
- eval , если источником является одно выражение;
- exec ,если источником является блок операторов;
- single , если код состоит из одного оператора;
- flag — необязательный параметр. По умолчанию flags=0 и определяет, будет ли скомпилированный код содержать асинхронные операции или какие инструкции из __future__ следует использовать. Указывается битами. Если нужно задать несколько инструкций, то их можно указывать через or ;
- dont_inherit — необязательный параметр. По умолчанию dont_inherit=False . Указывает, следует ли использовать future определенные в коде, в дополнение в тем, что указаны во flags;
- optimize — необязательный параметр. По умолчанию optimize=-1 .
Задаёт уровень оптимизации компилятора:- -1 — использовать настройки интерпретатора (регулируются опцией -O);
- 0 — не оптимизировать, включить debug;
- 1 — убрать инструкции asserts, выключить debug;
- 2 — то, что делает 1 + убрать строки документации.
Возвращаемое значение:
- объекта кода, готовый к выполнению.
Описание:
Функция compile() возвращает переданный, в качестве аргумента источник, в виде объекта кода, готового к выполнению. Объекты кода, полученные в результате выполнения функции compile() могут быть выполнены с помощью exec() или eval() .
Функция compile() бросает исключение SyntaxError , если скомпилированный источник недопустим и ValueErrorесли , если источник содержит нулевые байты.
Заметка:
При компиляции строки с многострочным кодом в режиме single или eval , ввод должен заканчиваться хотя бы одним символом новой строки ‘\n’ . Это должно облегчить обнаружение неполных и полных операторов в модуле code .
Предупреждение:
При компиляции в объект AST(абстрактного синтаксического дерева) возможен сбой интерпретатора Python с большой(сложной) строкой из-за ограничений глубины стека в компиляторе AST Python.
Изменено в Python 3.5: Ранее TypeError вызывалось, когда в источнике встречались нулевые байты.
Как скомпилировать Python код в .exe
Как скомпилировать Python код в .exe | немного теории
Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода.
Хочется отметить, что для меня Python является одним из самых интересных, мощных языков программирования. С ним я познакомился примерно в 2016 году и только спустя год осознал всю его мощь и красоту.
Многие задаются вопросом, когда написали программу на Python: “А как его скомпилировать в .exe файл?”. Вопрос довольно сложный, для того, кто только открыл для себя этот язык и ещё не сталкивался с pip.
pip – система управления пакетами, которая используется для установки и управления программными пакетами, которые написаны на Python. Если кратко, то pip – это файловый менеджер языка Python.
pyinstaller – программа, которая собирает все зависимости и python-приложение в один пакет и превращает его в исполняемый файл для Windows, Linux, MacOS.
Как скомпилировать Python код в .exe | практикум
Для начала, нам нужно установить pyinstaller с помощью pip. Пишем команду в командной строке:
Если вы используете Linux и у вас не установлен pip, то просто напишите команду:
На Windows, если вы не изменяли конфигурации установки Python, проблемы отсутствия pip у вас возникнуть не должно.
Вторым шагом будет переход в директорию с нашим проектом. Просто копируем путь и с помощью команды cd (наш путь) переходим в директорию, для Linux и Windows команда одинаковая.
Теперь давайте скомпилируем наш Python код в .exe, не будем тянуть.
Сделаем мы это с помощью установленного пакета pyinstaller.
Давайте разберем каждый флаг, они не обязательно все вам понадобятся.
- -F – этот флаг отвечает за то, чтобы в созданной папке dist, в которой и будет храниться наш исполняемый файл не было очень много лишних файлов, модулей и т.п.
- -w – этот флаг вам понадобится в том случае, если приложение использует tkinekt, оно блокирует создание консольного окна, если же ваше приложение консольное, вам этот флаг использовать не нужно.
- -i – этот флаг отвечает за установку иконки на наш исполняемый файл, после флага нужно указать полный путь к иконке с указанием её имени. Например: D:\LayOut\icon.ico
Вот и всё, сегодня мы рассмотрели, как скомпилировать Python код в .exe, Если у вас остались какие-либо вопросы, пишите их в комментарии, с удовольствием отвечу.
Так же подписывайтесь на обновления сайта, тут будет ещё много интересного!
Как создать exe файл для Python кода с помощью PyInstaller
Установка PyInstaller
Установка PyInstaller не отличается от установки любой другой библиотеки Python.
Вот так можно проверить версию PyInstaller.
Я использую PyInstaller версии 4.2.
Создание exe файла с помощью PyInstaller
PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:
- Считывает файл скрипта.
- Анализирует код для выявления всех зависимостей, необходимых для работы.
- Создает файл spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
- Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
- Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
- Создает папку DIST в папке со скриптом, если она еще не существует.
- Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.
Если использовать параметр команды onedir или -D при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр onefile или -F , то все окажется в одном исполняемом файле.
Возьмем в качестве примера простейший скрипт на Python c названием simple.py, который содержит такой код.
Создадим один исполняемый файл. В командной строке введите:
После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.
Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.
Вот что произойдет после запуска файла.
Добавление файлов с данными, которые будут использоваться exe-файлом
Есть CSV-файл netflix_titles.csv, и Python-script, который считывает количество записей в нем. Теперь нужно добавить этот файл в бандл с исполняемым файлом. Файл Python-скрипта назовем просто simple1.py.
Создадим исполняемый файл с данными в папке.
Параметр —add-data позволяет добавить файлы с данными, которые нужно сохранить в одном бандле с исполняемым файлом. Этот параметр можно применить много раз.
Можно увидеть, что файл теперь добавляется в папку DIST вместе с исполняемым файлом.
Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.
Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .
Добавление файлов с данными и параметр onefile
Если задать параметр —onefile , то PyInstaller распаковывает все файлы в папку TEMP, выполняет скрипт и удаляет TEMP. Если вместе с add-data указать onefile, то нужно считать данные из папки. Путь папки меняется и похож на «_MEIxxxxxx-folder».
Скрипт обновлен для чтения папки TEMP и файлов с данными. Создадим exe-файл с помощью onefile и add-data.
После успешного создания файл simple1.exe появится в папке DIST.
Можно скопировать исполняемый файл на рабочий стол и запустить, чтобы убедиться, что нет никакой ошибки, связанной с отсутствием файла.
Дополнительные импорты с помощью Hidden Imports
Исполняемому файлу требуются все импорты, которые нужны Python-скрипту. Иногда PyInstaller может пропустить динамические импорты или импорты второго уровня, возвращая ошибку ImportError: No module named …
Для решения этой ошибки нужно передать название недостающей библиотеки в hidden-import.
Например, чтобы добавить библиотеку os, нужно написать вот так:
Файл spec
Файл spec — это первый файл, который PyInstaller создает, чтобы закодировать содержимое скрипта Python вместе с параметрами, переданными при запуске.
PyInstaller считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.
Файл с расширением .spec сохраняется по умолчанию в текущей директории.
Если у вас есть какое-либо из нижеперечисленных требований, то вы можете изменить файл спецификации:
- Собрать в один бандл с исполняемым файлы данных.
- Включить другие исполняемые файлы: .dll или .so.
- С помощью библиотек собрать в один бандл несколько программы.
Например, есть скрипт simpleModel.py, который использует TensorFlow и выводит номер версии этой библиотеки.
Компилируем модель с помощью PyInstaller:
После успешной компиляции запускаем исполняемый файл, который возвращает следующую ошибку.
Исправим ее, обновив файл spec. Одно из решений — создать файл spec.
Команда pyi-makespec создает spec-файл по умолчанию, содержащий все параметры, которые можно указать в командной строке. Файл simpleModel.spec создается в текущей директории.
Поскольку был использован параметр —onefile , то внутри файла будет только раздел exe.
Если использовать параметр по умолчанию или onedir, то вместе с exe-разделом будет также и раздел collect.
Можно открыть simpleModel.spec и добавить следующий текст для создания хуков.
Создаем хуки и добавляем их в hidden imports и раздел данных.
Файлы хуков расширяют возможность PyInstaller обрабатывать такие требования, как необходимость включать дополнительные данные или импортировать динамические библиотеки.
Обычно пакеты Python используют нормальные методы для импорта своих зависимостей, но в отдельных случаях, как например TensorFlow, существует необходимость импорта динамических библиотек. PyInstaller не может найти все библиотеки, или же их может быть слишком много. В таком случае рекомендуется использовать вспомогательный инструмент для импорта из PyInstaller.utils.hooks и собрать все подмодули для библиотеки.
Скомпилируем модель после обновления файла simpleModel.spec.
Скопируем исполняемый файл на рабочий стол и увидим, что теперь он корректно отображает версию TensorFlow.
Вывод:
PyInstaller предлагает несколько вариантов создания простых и сложных исполняемых файлов из Python-скриптов:
- Исполняемый файл может собрать в один бандл все требуемые данные с помощью параметра —add-data .
- Исполняемый файл и зависимые данные с библиотеками можно собрать в один файл или папку с помощью —onefile или —onedir соответственно.
- Динамические импорты и библиотеки второго уровня можно включить с помощью hidden-imports .
- Файл spec позволяет создать исполняемый файл для обработки скрытых импортов и других файлов данных с помощью хуков.
Подписывайтесь на канал в Дзене
Полезный контент для начинающих и опытных программистов в канале Лента Python разработчика — Как успевать больше, делать лучше и не потерять мотивацию.
Python // Компиляция скриптов в .exe файл
Python // Компиляция скриптов в .exe файл
Чтобы перенести программу на другой компьютер, где не установлен Python, её нужно скомпилировать в .exe файл. Для этого есть несколько способов, и сегодня мы рассмотрим наиболее простой — библиотеку pyinstaller
Дадим в командной строке две команды:
pip install wheel
pip install pyinstaller
После установки всего необходимого, попробуем скомпилировать какую-нибудь программу. Я выбрал в качестве примера свой скрипт, который позволяет разархивировать zip файлы в определенную директорию. Он уже имеется у меня в качестве .py файла.
Итак, мы имеем .py файл под названием downblog.py, который успешно запускается и работает в качестве скрипта Python. И теперь мы хотим сделать из него .exe файл, чтобы мы могли просто дать его другу, и не заморачиваться с установкой питона и модулей на другом компе.
Создадим на диске D:\ какую-нибудь папку с простым именем. Я например создал папку с именем «1».
Поместим в эту папку скрипт, который мы хотим скомпилировать — downblog.py
Теперь зайдем в командную строку и дадим команду:
pyinstaller —onedir —onefile —name=downblog «D:\1\downblog.py»
После окончания процесса компиляции в папке 1 мы увидим несколько подкаталогов:
В подкаталоге dist лежит скомпилированный exe файл.
Вот так, легко и просто мы получили программу, которая теперь представляет собой обычный .exe файл, и может работать без необходимости ставить Python и модули. Достаточно просто перенести exe на нужный компьютер и запустить.