Как сделать exe файл в python pygame
Установка 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 создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.
Вот что произойдет после запуска файла.
Также, открыв spec-файл, можно увидеть раздел datas, в котором указывается, что файл netflix_titles.csv копируется в текущую директорию.
Запустим файл simple1.exe, появится консоль с выводом: Всего фильмов: 7787 .
Добавление файлов с данными и параметр 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 считывает содержимое файла для создания исполняемого файла, определяя все, что может понадобиться для него.
Файл с расширением .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-скриптов:
Я, как и многие новички в создании игр, столкнулся с проблемой как поделиться готовым проектом с друзьями, у которых не установлен Python.
На недостаток обучалок по созданию игр на Pygame не пожалуешься, но мне не удалось найти подробной инструкции как собрать единый exe-файл, для запуска которого не требуется держать рядом папку с изображениями и игровыми звуками.
В командной строке пишем:
Создание spec-файла (файла спецификации)
Pyinstaller создает приложение, выполняя содержимое файла спецификации.
Чтобы создать spec-файл, через командную строку в папке с проектом набираем:
Флаг --onefile создает файл спецификации, который позволит упаковать всё необходимое в один exe-файл.
Получаем файл mygame.spec
Редактирование spec-файла
Теперь нужно правильно настроить spec-файл. Открываем spec-файл в текстовом редакторе.
В качестве первого атрибута для объекта класса Analysis передается имя py-файла, который нужно скомпилировать.
Атрибут pathex отвечает за путь к папке проекта.
В списке datas указываются файлы, которые нужно загрузить для работы приложения (изображения, музыка/звуки, шрифты). Datas — это список кортежей. Каждый кортеж имеет два элемента строкового типа:
- Первый — путь до файла, который нужно загрузить.
- Второй указывает имя папки для хранения файла во время выполнения программы
('.' — означает, что файл будет помещен во временную папку без подкаталога).
Редактирование путей к файлам в коде
В коде до загрузки файлов необходимо добавить функцию, которая позволит программе найти необходимые для работы файлы независимо от своего расположения (подсмотрено тут).
При запуске приложения PyInstaller распаковывает данные во временную папку и сохраняет путь к ней в переменной среды _MEIPASS.
Функция resource_path проверяет создана ли временная папка, и если да, то возвращает путь к ней для дальнейшей загрузки файлов. В противном случае (например, если запустить код через интерпретатор) функция вернет тот путь, который в неё передали (то есть путь к папке проекта с игрой).
Чтобы получить путь к файлу
- если файл лежит в той же папке, что и py-файл, пишем:
- если файл вынесен в отдельную папку проекта, пишем:
При этом, если файл вынесен в отдельную папку проекта, то и во временной папке нужно создавать соответствующий подкаталог (см. редактирование параметра datas).
Далее загружаем файл:
С музыкой и шрифтами аналогично.
Создание exe
В командной строке вводим:
Готово! Exe-файл находится в папке dist.
Если в коде вашей игры в качестве функций выхода используются quit() или exit(), то скомпилированное приложение работать не будет.
Эти функции включены, чтобы новичкам было проще ориентироваться в коде, и предназначены только для использования в интерпретаторе. На самом деле для их корректной работы требуется загрузить модуль site.
Убедитесь, что вы сохраняете изображение в том же DPI, что и приложение WPF, некоторые форматы изображений содержат эту информацию в виде метаданных. Я не знаю, решает ли это проблему, но у меня возникли некоторые проблемы из-за этого, когда изображения, измененные до 100%, стали больше или меньше, чем ожидалось.
Может быть что-то подобное.
1 ответ
Я просто взломщик сценариев и идиот, когда дело доходит до инструментов командной строки. Но я ДЕЙСТВИТЕЛЬНО хотел упаковать свою игру на Python в исполняемый файл Windows. Я боролся с pyinstaller в течение нескольких дней, и прочитал все темы других, которые также пытаются выяснить это, и я также прочитал все документы по pyinstaller несколько раз. Ни одно решение не сработало для меня, но после долгих проб и ошибок я, наконец, наткнулся на рецепт успеха и хочу поделиться им на случай, если другие разработчики пигмеев будут биться с этим. Решение содержит биты и кусочки нескольких потоков.
Как создать одиночный exe-файл из многофайловой Python-игры Python с несколькими каталогами ресурсов с помощью pyinstaller в Windows:
Сначала установите pyinstaller.
Откройте командную строку Windows, введите:
Создайте игру на Python. Скажем, основной файл игры называется main_game_script.py, расположенный в
Добавьте эту функцию в main_game_script.py. Обязательно импортируйте os и sys. (Я бы никогда не понял, что мне нужно добавить эту функцию в мою игру, но она работает, так что спасибо тому, кто опубликовал ее в какой-то другой теме)
Загрузка изображений в игру , вызовите эту функцию, например, так:
Когда ваша игра будет готова к переносу в EXE, откройте командную строку Windows. Перейдите в основной каталог игры и введите:
Это будет выглядеть так:
Это создаст четыре важных элемента:
Выполнение команды выдает массу предупреждений и логов. Я не знаю, что все это значит. Но до тех пор, пока в итоговой выходной строке говорится об успехе, вы, вероятно, хороши. Ваш exe не будет работать пока. Во-первых, вы должны изменить файл .spec (который теперь существует в game_dir), чтобы добавить необходимые пути к игровым активам в exe:
Откройте файл main_game_script.spec в блокноте или в любом другом месте. Замените пустой список данных [] на пути к каталогам ресурсов, например, такие (используя кортежи!):
Первое значение каждого кортежа - это фактические имена файлов, которые вы хотите импортировать. Второе значение - это относительный путь от вас main_game_script.py Синтаксис и пути должны быть идеальными, иначе они не будут работать и могут не выдавать ошибку
Сохраните и закройте файл 'main_game_script.spec'. Вернитесь в командную строку Windows. Тип:
Это каким-то образом встраивает пути dir активов в exe, который вы уже построили
После всего этого (которое Это займет всего пару минут после того, как вы это сделаете 100 раз), у вас, наконец, будет один EXE-файл вашей игры с питоном, который включает в себя все игровые ресурсы. Если вы все сделали правильно, дважды щелкните по EXE, чтобы поиграть в игру с питоном.
Каждый новичок, изучающий пайтон сталкивается с проблемой упаковки своей программы в единый исполняемый файл.
Поскольку пайтон интерпретируемый язык программирования скомпилировать его в единый файл проблематично. Но не невозможно.
Для решения этой проблемы пайтон-разработчики идут на хитрость: в пакет программы "копируют" интерпретатор пайтон. Однако сделать это нужно правильно. И для этой цели обычно используют либо библиотеку pyinstaller , либо cx_freeze.
Pyinstaller позволяет упаковать программу чуть ли не в 2 клика. Однако если у вас есть дополнительные файлы, либо вы импортировали дополнительные библиотеки, скорее всего, pyinstaller не сможет их найти и у вас ничего не получится.
Поэтому я советую для сложных приложений использовать cx_freeze. И сразу скажу, все не так страшно, как может показаться. Мне удавалось запаковать игры с музыкой, картинками и все работало. Работаю я в Windows, а документацию библиотеки смотри здесь .
Шаг 1.Установка библиотеки cx_Freeze
Устанавливаем библиотеку cx_Freeze с помощью pip.
Вводим в командной строке:
Если появляется ошибка, то попробуйте добавить флаг --user.
Шаг 2. Напишем код, который запакует нашу программу.
В пакете нашей программы создаем файл с названием setup.py, в которую вписываем код, который запакует нашу программу. У меня была игра, и код компилятора выглядел так:
from cx_Freeze import setup, Executable
Шаг 3. Корректируем код
В третьей строке вписываем название файла, запускающего программу и название итогового файла exe.
Конвертировать иконку можно здесь .
В includes и zip_include_packages мы указываем те модули, которые мы использовали, чтобы python не забыл их запаковать.
В include_files мы указываем путь ко всем дополнительным файлам, которое использует наше приложение. Если у вас иерархия папок, а не все файлы скопом лежат в одной, то не забудьте в пути это указать.
В функции options ничего не исправляем.
В setup исправляем name - указываем имя главного файла, в version - версию приложения, а в description - описание приложения.
Ошибка с шрифтами
Шаг 3. Запаковываем.
Выполним запаковку, вбив в командную строку следующее:
У вас должен появиться файл build_windows. Это и есть наш итоговый пакет программы, который мы сможем распространять. Здесь же мы найдем файл .exe, запускающий нашу программу. Для него, например, можно создать ярлык и закинуть его на рабочий стол.
Возможные ошибки.
Если .exe файл выдает ошибку, то скорее всего, вы не указали, либо указали неправильно путь до одного из используемых файлов и программа не может его найти. Этот файл будет указан в ошибке.
Надеюсь у вас все получилось, а если нет, обязательно напишите об этом. И я постараюсь вам помочь.
Python становиться с каждым годом все популярней особенно у новичков. На самом деле это и понятно? так как синтаксис языка в отличает от других языков программирования, достаточной простой и если немного почитать мануалы и посмотреть ролики на ютубе можно написать простенькую программу. Возможности Python практически безграничные, на нем можно написать все что угодно. Например, в прошлой статье я рассказывал о том как можно создавать программы с графическим интерфейсом. Сегодня же поговорим о том как можно сделать программу которая будет запускаться на любом компьютере с Windows без установленного Python, если проще говоря покажу как можно преобразовать файл .py в .exe.
Если вы только начали изучать Python то следующие статьи будут Вам очень полезны.
Компилируем код Python в файл exe
И так для того чтобы из файла .py сделать .exe необходимо установить специальную библиотеку, с помощью которой можно скомпилировать python скрипт, для этого открываем командную строку и вводим
Если же установка прошла без ошибок, тогда нужно перейти в директорию где у вас храниться файл скрипт командой
Для компиляции вводим следующею команду
Но как мы видим у нас получился не один файл и несколько. Что бы сделать из py всего один файл exe, нужно ввести туже команду но только добавить специальный флаг.
Как видите скомпилировать скрипт и сделать из py exe достаточно просто, но есть несколько нюансов.
Если у вас код достаточно большой то готовьтесь к тому что и файл exe будет внушительных размеров, для примера могу сказать что код из 60 строк будет весить 110-120 Mb.
Так же если код скомпилирован в 64 битной ОС то в 32 битной он не пустится. Если код скомпилирован в 32 битной то он будет работать и 64 битной.
Читайте также: