cx_Freeze Exe Приложение закрывается, как только открывается

Я пытаюсь просто конвертировать мой проект Pygame Python в файл.exe с помощью cx_Freeze. Файл установки выполняется правильно и без ошибок, но проблема в том, что когда я запускаю свой.exe-файл, окно консоли открывается и закрывается, а окно моей игры не появляется.

Setup.py Я использую:

import os
os.environ['TCL_LIBRARY'] = "C:\\Users\\MY_USERNAME\\AppData\\Local\\Programs\\Python\\Python35-32\\tcl\\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\\Users\\MY_USERNAME\\AppData\\Local\\Programs\\Python\\Python35-32\\tcl\\tk8.6"

import cx_Freeze

executables = [cx_Freeze.Executable("main.py")]

cx_Freeze.setup(

    name="Shooty",
    options={"build_exe": {"packages": ["pygame"], "include_files": ["character.png"]}},

    description="Shooty, An epic platformer!",
    executables=executables

)

У меня была ошибка TCL, поэтому я добавил первые три строки. Тогда после этого все должно быть правильно. Я уже видел подобные посты, но ни один, кажется, не помогает.
cx_freeze приложение открывается, а затем быстро закрывается <У этого пользователя просто простая опечатка
Программа на python работает, но.exe не открывается cx_Freeze <Не имеет anwser и полезных комментариев.
Исполняемый файл, созданный с помощью cx_freeze, открывается за мгновение до закрытия <Этот пользователь фактически получает ошибку. Я не.

Чтобы уточнить /TLDR: я использую cx_Freeze для преобразования игры-пигмея в формат.exe. У меня есть только одно изображение с именем character.png. Сборка выполняется без ошибок (пока я включаю первые три строки, которые у меня есть). Единственная проблема: при запуске exe открывается консоль, но не мое игровое окно, и консоль закрывается немедленно.

1 ответ

Решение

Я скопировал ваш установочный скрипт и протестировал его с одним из моих собственных проектов Pygame. Сначала у меня это тоже не сработало, поэтому я исследовал проблему и нашел ошибку в Bitbucket: https://bitbucket.org/anthony_tuininga/cx_freeze/issues/211/if-__name__-__main__-doesnt-work-in

Видимо, есть ошибка, особенно с CX-Freeze версии 5.0, что строка if __name__ == "__main__": не будет работать. Но когда я заменил его if __name__.endswith('__main__'): как предложено в отчете об ошибке, тогда мое приложение Pygame работало с cx-Freeze, так что это решило проблему для меня.

Кроме того, я бы предложил добавить аргумент ключевого слова base="Win32Gui" в cx_Freeze.Executable, чтобы окно консоли не отображалось за окном Pygame, если только вы этого не хотите. Кроме того, Tkinter совершенно не нужен для приложения Pygame, так что вы можете добавить "excludes": ["Tkinter"] (или строчные tkinter в Python 3) чтобы параметры диктовали и избавлялись от первых трех строчек вашего скрипта.

Другие вопросы по тегам