Как я могу конвертировать Pygame в EXE? - PullRequest
0 голосов
/ 16 января 2019

Недавно я сделал игру в жанре пигмент. Я хочу показать это своим друзьям. Но, к сожалению, я не могу создать исполняемый файл, только файл .py. Я пытался использовать такие инструменты, как py2exe, которые могут не поддерживать Python 3.6 и pyinstaller. Я думаю, что pyinstaller может быть полезным, и я также могу успешно выполнить exe, но это не сработало вообще. Он просто показал, что не может открыть звуковой файл, который уже находится в том же файле.

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

Во-вторых, я использую os.path, который исполняемый файл показал, что он не может открыть ...../temp/..., который является длинным путем, но мой компьютер вообще не имеет этой папки.

Я новый парень, изучающий питон. Я искал день и не могу заставить его работать. Вы можете мне помочь?

1 Ответ

0 голосов
/ 28 февраля 2019

Я просто взломщик сценариев и идиот, когда дело доходит до инструментов командной строки.Но я ДЕЙСТВИТЕЛЬНО хотел упаковать свою игру на Python в исполняемый файл Windows.Я боролся с pyinstaller в течение нескольких дней, и прочитал все темы других, которые также пытаются выяснить это, и я также прочитал все документы по pyinstaller несколько раз.Ни одно решение не сработало для меня, но после долгих проб и ошибок я, наконец, наткнулся на рецепт успеха и хочу поделиться им на случай, если другие разработчики пигмеев будут биться головой об этом.Решение содержит биты и кусочки нескольких потоков.

Как создать один файл exe из многофайловой python-игры с несколькими каталогами ресурсов с помощью pyinstaller в Windows:

Сначала установите pyinstaller.

Откройте командную строку Windows, введите:

pip install pyinstaller

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

C:\Users\blueb\Documents\python\game_dir

Добавьте эту функцию в main_game_script.py.Обязательно импортируйте os и sys.(Я бы никогда не понял, что мне нужно добавить эту функцию в мою игру, но она работает, так что спасибо тому, кто опубликовал ее в какой-то другой теме)

import sys
import os

def resource_path(relative_path):
    try:
    # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

Загрузка изображений в игру, вызовите эту функцию, например, так:

asset_url = resource_path('assets/chars/hero.png')
hero_asset = pygame.image.load(asset_url)

Когда ваша игра будет готова к переносу в EXE, откройте командную строку Windows.Перейдите в основной каталог игры и введите:

pyinstaller --onefile main_game_script.py

Это будет выглядеть так:

C:\Users\blueb\Documents\python\game_dir>pyinstaller --onefile main_game_script.py

Это создаст четыре важных элемента:

- a main_game_script.spec file in the game_dir
- a 'build' dir in the game_dir
- a 'dist' directory in the game_dir
- a main_game_script.exe will be created in the 'dist' directory.

Выполнение команды выдает массу предупреждений и логов.Я не знаю, что все это значит.Но до тех пор, пока в итоговой строке выдается «Успех», вы, вероятно, хороши.Ваш exe не будет работать пока.Во-первых, вы должны изменить файл .spec (который теперь существует в game_dir), чтобы добавить в exe необходимые пути к игровым ресурсам:

Откройте файл main_game_script.spec в блокноте или в любом другом месте.Замените пустой список данных [] на пути к каталогам ресурсов, например, такие (используя кортежи!):

datas=[('assets/chars/*','assets/chars'),('assets/tiles/*.png','assets/tiles'),('assets/fonts/*','assets/fonts')],

Первое значение каждого кортежа - это фактические имена файлов, которые вы хотите импортировать.Второе значение - это относительный путь от вас main_game_script.py Синтаксис и пути должны быть идеальными, иначе они не будут работать и могут не выдавать ошибку

Сохраните и закройте файл 'main_game_script.spec'.Вернитесь в командную строку Windows.Тип:

pyinstaller main_game_script.spec

Примерно так:

C:\Users\blueb\Documents\python\game_dir>pyinstaller main_game_script.spec

Это каким-то образом встраивает пути dir актива в exe, который вы уже построили

После всего этого (котороеЭто займет всего пару минут после того, как вы это сделаете 100 раз), у вас, наконец, будет один EXE-файл вашей игры с питоном, который включает в себя все игровые ресурсы.Если вы все сделали правильно, дважды щелкните по EXE, чтобы поиграть в вашу игру на Python.

Примечание: чтобы сделать все правильно с первого раза, у меня ушло несколько дней.Я начал с простого test_game_script.py с минимальным количеством кода и методично итерировал, добавляя дополнительные пути к ресурсам и сложность с каждой итерацией, чтобы я мог изолировать, что было сломано и почему.Если ваша игра не конвертируется в EXE должным образом, начните с простого 5-строчного игрового сценария с одним активом и медленно наращивайте его до тех пор, пока у вас не будет работающего конвейера, ТО затем примените этот функционирующий конвейер к активным играм.В противном случае изолировать проблему будет невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...