2016-12-29 45 views
3

我想用cx_Freeze將我的pygame python項目轉換爲.exe文件。安裝文件正確無誤地執行,但問題是,當我運行我的.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 <沒有安納塞爾,也沒有有用的評論。
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

顯然有一個bug,特別是cx-Freeze 5.0版,行if __name__ == "__main__":不起作用。但是當我用bug報告中建議的if __name__.endswith('__main__'):代替它時,我的Pygame應用程序與cx-Freeze一起工作,所以這解決了我的問題。除此之外,我建議將關鍵字參數base="Win32Gui"添加到cx_Freeze.Executable,這樣控制檯窗口不會出現在Pygame窗口後面,除非您需要它。此外,對於Pygame應用程序,Tkinter是完全不必要的,因此您可以將"excludes": ["Tkinter"](或Python 3中的小寫tkinter)添加到選項字典中,並刪除腳本的前三行。

+0

我注意到在任務管理器中使用Win32Gui選項(我沒有測試過),EXE在關閉Pygame窗口後仍然運行。可能需要添加一個sys.exit()調用來解決此問題。 – tjohnson

+1

編輯:沒關係,我使用你的解決方案來解決問題,並且解決了一些問題。謝謝!這已經比它的價值更大的麻煩, – Octo

+0

這個問題顯然已經修復(我有同樣的錯誤,但沒有解決我的問題):https://bitbucket.org/anthony_tuininga/cx_freeze/commits/90829a1fba648fc9fd798afdfae14a2edcdc4b53 – ThePhi

相關問題