Как проект python перевести в exe



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Компиляция python файла в exe

я компилирую скрипт на python в exe файл, у меня помимо библиотек есть 3 dll файла которые нужно было положить в папку с библиотеками python для работы с библиотекой cx_oracle. Так вот, нужно ли мне при компиляции через библиотеку pyinstaller добавлять эти библиотеки в папку со скриптом, или нужно сделать что-то другое для корректной работы exe файла на компьютере на котором не будет ни питона ни этих dll, или он всё сделает сам?
Отслеживать
задан 25 авг 2021 в 18:43
41 4 4 бронзовых знака
А попробовать? Скомпилировать. Запустить. Проверить. Заработало? Докинуть дллки. Запустить. Проверить. Заработало? Писать сюда с тем, что «Пробовал запускать без длл и с длл, чего куда надо положить чтобы заработало?» Для теста можешь воткнуть прям на старте гуя запрос в бд с банальным селектом любого поля которое точно есть и месседжбокс который тебе результат запроса выведет.
25 авг 2021 в 19:40
Вы можете конвертировать все свои файлы, которые в проекте вашем, в exe с помощью pyinstaller , и созданные папки уже отправлять на другой компьютер, где нет питона и т. п.
Как создать exe файл для Python кода с помощью PyInstaller
Установка PyInstaller не отличается от установки любой другой библиотеки Python.
pip install PyInstaller
Вот так можно проверить версию PyInstaller.
pyinstaller --version
Я использую PyInstaller версии 4.2.
Создание exe файла с помощью PyInstaller
PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:
- Считывает файл скрипта.
- Анализирует код для выявления всех зависимостей, необходимых для работы.
- Создает файл spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
- Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
- Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
- Создает папку DIST в папке со скриптом, если она еще не существует.
- Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.
Если использовать параметр команды 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-файл будет называться так же, как и файл скрипта.
Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.
Вот что произойдет после запуска файла.
Также, открыв 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 позволяет создать исполняемый файл для обработки скрытых импортов и других файлов данных с помощью хуков.
Как конвертировать Java программу в .exe файл
Часто разработчики, особенно начинающие, сталкиваются с необходимостью конвертировать java программу в исполняемый .exe файл. Это может быть полезно, например, если программа должна работать на компьютерах без установленной Java, или если требуется, чтобы программа имела свой уникальный иконку на рабочем столе.
Важно отметить, что Java программы обычно не конвертируются в .exe файлы, как это происходит с программами на C++ или C#. Вместо этого, они компилируются в .class файлы (байт-код), которые затем интерпретируются Java Virtual Machine (JVM). Однако существуют инструменты и подходы, которые позволяют «упаковать» .class файлы в .exe.
Использование Launch4j
Один из таких инструментов — это Launch4j. Это кросс-платформенный инструмент, который обертывает .jar файлы в легковесные .exe файлы. Launch4j также позволяет добавить иконку к .exe файлу, указать версию JVM для запуска и многое другое.
Пример использования Launch4j:
- Сначала нужно скомпилировать java программу в .jar файл.
- Затем запустить Launch4j и выбрать пункт «New configuration».
- В поле «Output file» указать путь и имя будущего .exe файла.
- В поле «Jar» указать путь к .jar файлу.
- В разделе «JRE» можно указать минимальную и максимальную версию JVM.
- После этого можно нажать «Build» и получить готовый .exe файл.
Создание инсталлятора
Если требуется создать инсталлятор для программы, можно воспользоваться инструментом Inno Setup. Он позволяет создать полноценный инсталлятор, который может установить JRE, если он отсутствует на компьютере пользователя, а также создать ярлык на рабочем столе и добавить программу в меню «Пуск».
Пример использования Inno Setup:
- Сначала нужно создать скрипт инсталляции, в котором указать, какие файлы нужно установить и куда.
- Затем можно запустить Inno Setup и выбрать пункт «New».
- В появившемся окне нужно выбрать пункт «I want to create a new script file».
- Далее следовать инструкциям мастера, указывая требуемые параметры.
- После завершения работы мастера можно нажать «Build» и получить готовый инсталлятор.
Таким образом, несмотря на то, что Java программы не превращаются в .exe файлы так же, как это происходит в других языках, существуют инструменты, которые позволяют достичь схожего результата.



