2015-09-19 68 views
2

我已經設法讓pyinstaller運行正常或多或少正確,只是它打開了太多的窗口。這是pygame項目,並且每隔一秒左右它會繼續加載整個事件。幾秒鐘後,我的電腦就會裝滿遊戲窗口,一切都會停止。pyInstaller多次加載腳本

從命令行運行它,我只能看到打印輸出說應用程序開始粘貼在命令行窗口中重複。據我所知,應用程序不會關閉或退出,只是產生越來越多。

我打電話,開始pyinstaller的命令是這樣的:

pyinstaller --onedir main_local.py 

主要文件是這樣的:

# Library imports 
import pygame 

# Project imports 
from multiroidal_client import MultiroidalClient 
from settings    import * 
import time 

# Main program function 
def main(): 

    # Initialise game class 
    game = MultiroidalClient(SCREEN_SIZE, ('127.0.0.1', 8080)) 

    # Start game loop 
    game.main_game_loop() 


# Execute main function 
if __name__ == '__main__': 
    main() 

我嘗試註釋掉如果__ __名...有點看如果由於某種原因它正在執行主函數並且每次偶然地或者以某種方式調用重複。當評論說,執行官沒有做任何事情,正如你所期望的那樣。

任何想法?我沒有包含任何更多的代碼,因爲它有大量的代碼,我不確定哪些部分是相關的。讓我知道你是否需要看別的東西。

乾杯

編輯:我添加了一個快速打印的game.main_game_loop後()只是爲了檢查,如果腳本跳出了無限的遊戲循環。沒有這樣的運氣。它加載了一個腳本的並行實例,全部同時運行。

編輯:我看了pyinstaller文檔,並設法得到一些更多的調試。不確定它是否相關,但在這裏。這個對話框只是一遍又一遍地重新打印。我也試過--noupx選項,有時可以幫助顯然 - 沒有這樣的運氣。

enter image description here

+0

如果您將'main'重命名爲'main2',會發生什麼? – cdonts

+0

@cirstts好主意,不幸的是沒有這樣的運氣。不變。 – Oliver

回答

3

多重!

我嘗試了一些更簡單的python程序,他們打包了一切正常。所以它不是我的方法的問題,它是代碼。再次思考它,在項目中打包代碼肯定是不尋常的或困難的。嗯,也許線程?

我有幾個線程並行運行,它們是多處理線程。谷歌搜索後,我發現這個magic fix

您只需在if __name__ == "__main__"之後直接插入此行,即multiprocessing.freeze_support(),然後再調用main()函數。

if __name__ == '__main__': 

    # Pyinstaller fix 
    multiprocessing.freeze_support() 

    main() 

看起來誰開發多模塊的球員必須包括黑客攻擊,使冷凍包裝(py2exe,pyinstaller等)。似乎很奇怪,它沒有包含更順利一點。如果您離開freeze_support()調用,即使不是從打包代碼運行,也不是標準python文件運行。

無論如何,如果你凍結/僞裝代碼並且它似乎一遍又一遍地執行本身,請檢查你是否使用多處理。一個簡單的谷歌「多處理pyinstaller」給出了答案。

僅供參考這隻適用於--onedir模式,--onefile模式是一個不同的故事,不支持在Windows上。你必須挖掘更多來解決這個問題。

+0

你是一個現場救星!這值得更高的評價!從來沒有想過我會找到解決這個快速 - THX –