Как сделать exe pygame
Перейти к содержимому

Как сделать exe pygame

  • автор:

 

Используем PyInstaller для создания exe-файла игры на Pygame

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

На недостаток обучалок по созданию игр на Pygame не пожалуешься, но мне не удалось найти подробной инструкции как собрать единый exe-файл, для запуска которого не требуется держать рядом папку с изображениями и игровыми звуками.

Из множества библиотек, собирающих проекты в exe, выбрал PyInstaller. Его оказалось достаточно, чтобы справиться с задачей. Опишу все пошагово (для Windows).

Установка PyInstaller

В командной строке пишем:

Создание 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.

Name already in use

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Script for converting a pygame game into a .exe file for windows.

Install pygame and py2exe libraries. The script has been tested with python 2.7.3, pygame 1.9.1 and py2exe 0.6.9

Place the 2exe.py script in the same directory as the launcher script for your game, update the variables at the top of the 2exe.py file and run 2exe.py

If successful, the script will create a ‘dist’ directory with a .exe for your game.

How can I convert pygame to exe?

Recently, I made a pygame game. I want to show it to my friends. But unfortunately, I cant make an executable file, only a .py file. I have tried to use tools such as py2exe which might not support Python 3.6 and pyinstaller . I think pyinstaller may be useful, and I can also make an exe successfully but it didn’t work at all. It just showed it couldn’t open the sound file which is already in the same file.

 

I have tried two ways to load files firstly, just load the path then the exe converted shows it can’t open the file which is already in the same path with the exe.

Secondly, I use the os.path which the exe showed it cant open . /temp/. which is a long path but my computer doesn’t have this folder at all.

I am a new guy to learn python. I have searched for a day and can’t make it work. Can you help me?

Bili Nico's user avatar

6 Answers 6

I’m just a scripting hack, and an idiot when it comes to command line tools. But I REALLY wanted to package up my python game into a Windows executable. I wrestled with pyinstaller for days, and read all of the threads of others who are also trying to figure it out, and I also read all the pyinstaller docs several times. No one solution worked for me, but after much trial and error I finally stumbled onto a recipe for success and want to share it in case there are other pygame developers out there banging their heads against this. The solution contains bits and pieces of several threads.

How to create a single file exe of a multi-file python pygame with several asset directories using pyinstaller on Windows:

First, install pyinstaller.

Open Windows Command Prompt, type:

Make a python game. Say the main game file is called main_game_script.py, located in

Add this function to main_game_script.py. Make sure to import os and sys. (I never would have figured out on my own that I needed to add this function to my game, but it works, so thanks to whoever posted it in some other thread)

To load images into game, call that function, like such:

When your game is ready to be wrapped in an EXE, open Windows Command Prompt. Go to the main game directory and type:

It’ll look like this:

This will create four important items:

Running the command spits out a ton of warnings and logs. I don’t know what it all means. But as long as the final output line says success, you’re probably good.

If your exe is still not working: First, you must modify the .spec file (which now exists in the game_dir) to add the needed game asset paths to the exe:

Open the main_game_script.spec file in notepad or whatever. Replace the empty datas[] list with asset directory paths like such (using tuples!):

The first value of each tuple is the actual file names you want to import. The second value is the relative path from you main_game_script.py The syntax and paths must be perfect, or it won’t work and may not throw an error

Save and close the ‘main_game_script.spec’ file. Return to your windows command prompt. Type:

This somehow embeds the asset dir paths into the exe that you’ve already built

After all this (which only takes a couple minutes after you’ve done it 100 times), you finally have a single file EXE of your python game that includes all of the game assets. If you’ve done everything right, double click on the EXE to play your python game.

Как я могу конвертировать Pygame в EXE?

Убедитесь, что вы сохраняете изображение в том же 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, чтобы поиграть в игру с питоном.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *