Pygame 分发 - 运行时错误
我在用Python编写的2D街机游戏上遇到了问题,已经折腾了两天,还是找不到解决办法。
问题是:我想创建一个可以在Windows上运行的可执行文件,让我的程序正常工作。我已经成功生成了一个.exe
文件,但一启动这个文件就出错:
Runtime Error!
Path\MyGame.exe
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
我尝试过用各种工具来创建这个.exe
文件,比如cx_freeze
、py2exe
和pyinstaller
。最后用哪个工具都没关系,结果都是一样的错误。我还试着在另一台电脑上运行这个.exe
文件,但也失败了。我更新了Microsoft Visual C++ Redistributable,但还是没用。
所以问题可能出在我的代码里。程序本身运行正常,但一定有什么东西阻止我生成一个正常工作的.exe
文件。
我的代码大约有1000行,我知道让别人检查这么多代码有点过分,但我希望有人遇到过类似的问题,或者能给我一些建议,告诉我为什么会出现这个错误,帮我解决一下。
你可以在这里找到代码。
3 个回答
我也遇到过同样的问题,解决办法是把pygame的默认字体文件放到发布文件夹里。这个字体在我的项目中用到了,我原本以为它会自动包含在构建文件里。
我也遇到过类似的问题,最后找到了解决办法:
经过几周的努力(其实我之前就有这个问题),我很高兴地说我解决了这个问题! :)
问题的第一部分 (https://i.stack.imgur.com/WpkjR.png):
我通过编辑setup.py脚本,添加了“excludes”部分来解决这个问题。这样就成功生成了可执行文件!
修改后的setup.py脚本:
from distutils.core import setup
import py2exe
setup(windows=['source_static.py'], options={
"py2exe": {
"excludes": ["OpenGL.GL", "Numeric", "copyreg", "itertools.imap", "numpy", "pkg_resources", "queue", "winreg", "pygame.SRCALPHA", "pygame.sdlmain_osx"],
}
}
)
所以,如果你也遇到类似的问题,只需把那些“缺失”的模块放到这个“excludes”行里。
第二部分:
在我成功生成可执行文件后,接下来又遇到了一个问题:“应用程序请求运行时以不寻常的方式终止。请联系...”。经过几天的搜索和思考,我终于找到了解决办法。我简直不敢相信这个问题是如此荒谬。问题出在我的代码中,字体定义上:
font1 = pygame.font.SysFont(None, 13)
把“None”改成某个系统字体的名字(比如“Arial”,必须是字符串),然后重新编译,我简直不敢相信我的.exe文件竟然能用了!
font1 = pygame.font.SysFont("Arial", 13)
当然,你可以使用自己的字体,但必须在程序中指定它的路径并定义它。
所以,对于所有遇到这些问题的人,试试这些步骤,希望你们能成功。我真的希望这能帮到你们,因为我花了好几天和几周的时间来解决这些问题。我甚至尝试用所有版本的Python和pygame,以及许多其他的.exe构建工具和setup脚本,但都没有成功。除了这些问题,我之前还有很多其他问题,但我在stackoverflow.com上找到了答案。
我很高兴找到了解决这些问题的方法,也希望能帮助到你们,如果你们遇到同样的问题。
小贴士(我也做过的事情):
第一:更新你的Microsoft Visual C++库到最新版本。
第二:如果你的可执行程序需要图像或字体,记得把它们放到dist文件夹里(就是你生成.exe文件的地方)。
第三:在生成.exe文件时,把所有需要的文件放到setup.py脚本所在的文件夹里(所有主脚本使用的文件和目录)。
使用了Python 2.7 x64、pygame和py2exe。
问题不在于你的代码,而在于你是怎么生成你的 .exe 文件的。用 pygame 来做这个确实挺麻烦的,不过只要动动脑筋和上网查查资料,你还是可以搞定的。
这儿有个链接可以帮你入门: http://pygame.org/wiki/Pygame2exe