Python Py2Exe文件在结束时关闭,可能是由于

Python Py2Exe文件在结束时关闭,可能是由于,python,pygame,py2exe,Python,Pygame,Py2exe,我制作了一个py2exe可执行文件,这是一个“编程测试”。它是在pygame中制作的,当我以EXE的形式运行它时,它会一直工作到最后。我想是因为结尾有pygame文本。错误如下。下面是代码的一部分,它不是作为exe,而是作为普通的.py: def endgame(): global programmer if programmer < 0: programmer = 0 font = pygame.font.SysFont(None, 25)

我制作了一个py2exe可执行文件,这是一个“编程测试”。它是在pygame中制作的,当我以EXE的形式运行它时,它会一直工作到最后。我想是因为结尾有pygame文本。错误如下。下面是代码的一部分,它不是作为exe,而是作为普通的.py:

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))
def endgame():
全球程序员
如果程序员<0:
程序员=0
font=pygame.font.SysFont(无,25)
text=font.render(“您是:”+str(程序员)+%a程序员。”,真,黑色)
gameDisplay.blit(文本,(170200))
错误:

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.)
C:\Python27\Programming Survey\dist>Survey.exe
survey.exe:43:运行时警告:使用字体:DLL加载失败:指定的模块c
不可能找到。
(导入错误:DLL加载失败:找不到指定的模块。)
回溯(最近一次呼叫最后一次):
文件“survey.py”,第223行,在
文件“survey.py”,第217行,主
文件“survey.py”,第43行,在尾声中
文件“pygame\\ uuuuu init\ uuuuuu.pyc”,第70行,在\uuuu getattr中__
未实现错误:字体模块不可用
(导入错误:DLL加载失败:找不到指定的模块。)

好的,您的问题是您正在尝试使用
pygame.font
,但是您的pygame安装不包括该模块

比如说:

此模块是可选的,需要
SDL\u ttf
作为依赖项。在尝试使用模块之前,您应该测试
pygame.font
是否可用并已初始化

实际上,它可能无法加载的原因有两个:

  • 在构建PyGame之前,您没有安装
    SDL\u ttf
    (或者显式禁用它,或者安装了预编译的二进制文件来执行这些操作之一),因此PyGame甚至没有内置支持
  • 您根据
    SDL\u ttf
    构建了一个DLL,但该DLL在运行时不可用
  • 无论哪种方式,这都意味着您不能使用
    pygame.font
    *如果您的问题是#1,您将需要重建pygame(或获得不同的二进制安装)。如果是#2,则需要以与安装其他SDL dll相同的方式安装
    SDL#u ttf.dll

    如果您不确定,请先尝试#2,如果它仍然不起作用,则需要新的PyGame版本


    如果你知道你在做什么(或者只是想想,无论是谁构建了你的二进制文件,都可能包含了对它的支持,而不是<代码> PyPrase.Frave<代码> >),你可能需要考虑使用(有稍微不同的接口)或<代码> PyPrase.ftFooG/<代码>。(几乎完全替代了

    pygame.font
    构建在
    pygame.freetype
    )上。您甚至可能想要
    os.putenv('pygame\u freetype','1'))
    或类似版本,这使得更新版本的
    pygame.font
    可以尝试将
    pygame.ftfont
    作为备用版本。但所有这些都可能与Linux用户比Windows用户更相关。还要注意的是,直到1.9.2,它才包含在标准版本中,截至2014年12月5日,它们还没有发布1.9.2的正式版本

    改用pygame2exe修复了这个问题,它也使用py2exe,但是它有字体DLL和类似的预加载,所以它可以工作。

    调试类似的东西的一种方法是从控制台运行.exe。如果这不起作用,它只是创建了一个新的控制台,只需在主代码周围使用
    try:/finally:
    就可以了
    input()
    最后,这样你就有机会在窗口关闭之前看到它打印出来的内容。谢谢,错误帖子你从哪里获得PyGame,以及你是如何安装的?我从主站点获得它,并像普通一样安装它。它作为一个.py文件工作。正如你所知,它作为一个普通的.py文件工作。我已经尝试将SDL_ttf.dll文件放入t他是dist文件夹,没有骰子。它只是说dll未能以.exe文件形式加载,这令人困惑。@HunterKepley:那么问题是dll没有通过
    py2exe
    捆绑到正确的位置。这可能很难做到正确,但如果你做得不对,你就会遇到这个问题。