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) чтобы параметры диктовали и избавлялись от первых трех строчек вашего скрипта.