Как преобразовать pygame в exe?

avatar
Bili Nico
16 января 2019 в 04:22
20110
4
11

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

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

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

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

Источник
Grismar
16 января 2019 в 04:29
3

Добро пожаловать в StackOverflow и поздравляем с написанием рабочей игры. Ваша проблема ясна, но это не тот вопрос, на который легко ответить, или тип вопроса, для которого обычно используется StackOverflow. Вероятно, вам стоит попробовать написать более простой сценарий, иллюстрирующий проблему - возможно, вы сами столкнетесь с решением. В противном случае опубликуйте здесь более простой сценарий, который вы не можете заставить работать, с инструкциями о том, что вы сделали и что вызывает проблему. И py2exe, и pyinstaller могут быть хорошими решениями, если вы можете заставить их работать.

xFly.Dragon
16 января 2019 в 08:42
0

Вы используете формат ogg для звука?

import random
16 января 2019 в 22:51
0

Похоже, у вас есть более конкретная проблема: «Как загрузить файлы в исполняемые файлы, созданные с помощью PyInstaller?» Если да, то этот ответ представляет собой подробный пример. Если после этого ответа у вас возникнут определенные проблемы, отредактируйте этот вопрос или попросите другой, чтобы получить дополнительную помощь. Кроме того, чтение «Как задавать вопросы» поможет вам создать вопросы, на которые с большей вероятностью будет полезен ответ.

Long Đào Hải
13 апреля 2021 в 03:18
0

Сегодня у меня такой же вопрос, как и у вас. Итак, я исследовал и увидел видео-руководство на Youtube с преобразованием pygame в .exe. Надежда может помочь любому, у кого такая же проблема youtube.com/watch?v=lTxaran0Cig В любом случае, это видео снято в январе 2020 года, поэтому на момент появления этого вопроса у нас нет четкого ответа

Ответы (4)

avatar
aleolux
22 октября 2021 в 03:56
0

Ответ @Blue Botic выше работает как шарм! Спасибо!

Я добавил параметр "--noconsole" в команду ниже, чтобы избавиться от консоли и показать только главное окно игры:

pyinstaller --onefile --noconsole main_game_script.py
avatar
just_another_beginner
2 июня 2021 в 10:57
1

У меня тоже была такая же проблема, и я целыми днями просматривал Google. Сегодня я наконец понял, в чем проблема. Прежде чем пытаться преобразовать его, не забудьте также установить Pygame через Терминал. Просто введите «pip install pygame»

avatar
wyz23x2
4 августа 2020 в 09:17
1

1. Добавьте --hidden-import pygame . Примерно так:
python -m PyInstaller <options> xxx.py --hidden-import pygame
2. Взломайте pygame stdout. Если вы использовали параметр -w, он завершится ошибкой из-за (раздражающего) вывода версии pygame.
Обходной путь:

import contextlib
with contextlib.redirect_stdout(None):
    import pygame
avatar
Blue Botic
28 февраля 2019 в 13:18
22

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

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

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

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

pip install pyinstaller

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

C:\Users\USERNAME\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\USERNAME\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\USERNAME\Documents\python\game_dir>pyinstaller main_game_script.spec

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

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

Примечание: на то, чтобы сделать это правильно с первого раза, у меня ушло несколько дней. Я начал с простого test_game_script.py с минимальным кодом и методично повторял, добавляя больше путей к ресурсам и сложности с каждой итерацией, чтобы я мог изолировать, что было сломано и почему. Если ваша игра не конвертируется в EXE должным образом, начните с простого 5-строчного игрового скрипта с одним активом и медленно развивайте его, пока не получите работающий конвейер, ЗАТЕМ примените этот рабочий конвейер ресурсов к вашей АКТУАЛЬНОЙ игре. В противном случае изолировать проблему будет невозможно.

Michael Sheinman
16 января 2021 в 03:19
0

Я пробовал эти шаги как на Mac, так и на оконном компьютере, и все время получаю это сообщение об ошибке: Traceback (последний вызов последним): файл «game.py», строка 1, в <module> ModuleNotFoundError: нет модуля с именем «pygame» '[68210] Не удалось запустить скрипт игры.