2016-12-29 2 views
3

Я пытаюсь просто преобразовать проект pygame python в .exe-файл с помощью cx_Freeze. Файл установки выполняется правильно и без ошибок, но проблема в том, что при запуске моего .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 app opens then closes quickly < Этот пользователь просто имеет простую опечатку
python program works but .exe does not open cx_Freeze < не имеет никакого anwser, и никакой полезный комментарий.
Executable generated with cx_freeze opens for an instant before closing < Этот пользователь на самом деле получает сообщение об ошибке. Я не.

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

+0

У любого есть разрешение? – Octo

+3

Попробуйте запустить исполняемый файл из командной строки. Консоль не будет закрыта немедленно таким образом, поэтому, если есть какие-либо сообщения об ошибках, вы сможете их прочитать. – Kevin

+0

ОК, просто сделал это. Консоль не имеет выхода. – Octo

ответ

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

+0

Я заметил, что с опцией Win32Gui (я не тестировал без нее) в диспетчере задач EXE остается включенным даже после закрытия окна Pygame. Может потребоваться добавить вызов sys.exit(), чтобы исправить это. – tjohnson

+1

Редактировать: неважно, я получил его, чтобы работать, используя ваше решение и немного бормоча. Благодаря! Это было больше неприятностей, чем его ценность, – Octo

+0

Проблема была исправлена, очевидно (у меня такая же ошибка, но у меня нет исправления): https://bitbucket.org/anthony_tuininga/cx_freeze/commits/90829a1fba648fc9fd798afdfae14a2edcdc4b53 – ThePhi

Смежные вопросы