2014-12-05 71 views
0

我做了一個py2exe可執行文件,這是一個「編程測驗」。它是在pygame中製作的,當我將它作爲EXE運行時,它一直運行到結束。我假設因爲結尾有pygame文字。錯誤在下面。下面的代碼的不作爲exe文件,但作爲一個正常的.py工作的部分:Py2Exe文件結束,可能是由於

def endgame(): 
    global programmer 
    if programmer < 0: 
     programmer = 0 
    font = pygame.font.SysFont(None, 25) 
    text = font.render("You are: " + str(programmer) + "% a programmer.", True, black) 
    gameDisplay.blit(text, (170,200)) 

錯誤:

C:\Python27\Programming Survey\dist>survey.exe 
survey.exe:43: RuntimeWarning: use font: DLL load failed: The specified module c 
ould not be found. 
(ImportError: DLL load failed: The specified module could not be found.) 
Traceback (most recent call last): 
    File "survey.py", line 223, in <module> 
    File "survey.py", line 217, in main 
    File "survey.py", line 43, in endgame 
    File "pygame\__init__.pyc", line 70, in __getattr__ 
NotImplementedError: font module not available 
(ImportError: DLL load failed: The specified module could not be found.) 
+1

調試這種東西的一種方法是從控制檯運行.exe。而且,如果這不起作用,它只是創建一個新的控制檯,只需在主代碼周圍使用'try:/ finally:'在末尾輸入()',這樣你就有機會看到什麼它在窗戶關閉之前打印出來。 – abarnert 2014-12-06 00:17:44

+0

謝謝,發佈錯誤 – HKVariant 2014-12-06 00:22:00

+0

你從哪裏得到PyGame,以及你是如何安裝它的? – abarnert 2014-12-06 01:20:15

回答

0

通過改用pygame2exe修復,它也使用了py2exe,但它有字體DLL和預加載的字體,所以它工作。

0

OK,你的問題是,你正在嘗試使用pygame.font ,但是你的PyGame的安裝不包含那個模塊。

由於the docs說:

This module is optional and requires SDL_ttf as a dependency. You should test that pygame.font is available and initialized before attempting to use the module.

實際上有兩個原因,可能無法加載:

  1. 你沒有建立pygame的(或明確禁用它之前安裝SDL_ttf,或安裝預編譯的二進制文件就是這樣做的),所以這種支持甚至不會內置到您的PyGame中。
  2. 您針對SDL_ttf構建了DLL,但該DLL在運行時不可用。

無論哪種方式,這意味着你不能使用pygame.font。*如果你的問題是#1,你需要重建pygame的(或獲得不同的二進制安裝)。如果它是#2,則需要按照安裝其他SDL DLL的相同方式安裝SDL_ttf.dll

如果您不確定,請先嚐試#2,如果仍不起作用,您需要新建PyGame。

如果你知道你在做什麼(或只是想,也許誰建的二進制文件,可能包括爲它而不是pygame.font支持),您可能要考慮使用pygame.freetype(其中有一個稍微不同的接口)或pygame.ftfont(代替pygame.font幾乎完全替代pygame.freetype)。您可能甚至想要os.putenv('PYGAME_FREETYPE', '1')或類似,這使pygame.font的較新版本嘗試pygame.ftfont作爲後備。但所有這些與Windows用戶相比更有可能與Linux用戶相關。另外請注意,它直到1.9.2才被包含在標準版本中,截至2014年12月5日,它們仍然沒有正式發佈1.9.2版本。

+0

那麼它就像一個普通的.py文件一樣工作,就如你所知。我已經嘗試將SDL_ttf.dll文件放在dist文件夾中,沒有骰子。 – HKVariant 2014-12-06 11:48:56

+0

它只是說,該DLL無法加載在.exe文件形式,這是令人困惑。 – HKVariant 2014-12-06 12:21:32

+0

@HunterKepley:然後問題是DLL沒有被'py2exe'綁定到正確的位置。這可能會很困難,但如果你做得不對,你會遇到這個問題。 – abarnert 2014-12-08 22:08:13