我正在使用ubuntu和python 2.6
我发现我的系统上已经安装了cx freeze(是否有办法检查它是否与我的Python版本兼容?)
然而,我有一个小的pygame脚本(导入另一个模块和一些图像),我想编译它;
我将此文件用作setup.py:
#!/usr/bin/python
from cx_Freeze import setup, Executable
setup(
name = 'Example',
version = '0.1',
description='hi',
executables = [Executable('/home/antonio/Python 26 save/opt/example.py')]
)
如果我运行生成的可执行文件,(通过终端)我收到此错误:
Fatal Python error: (pygame parachute) Segmentation Fault
Aborted
我该怎么办?我搜索了但是我发现很少的例子,我没有在谷歌搜索结果中看到这个错误
当然,程序在使用cx freeze之前运行得很好答案 0 :(得分:1)
我使用python 2.7遇到了类似的问题。我在自己的程序中发现了这个分段错误的两个原因,但我只有一个解决方案。
原因1.初始化没有路径的字体,即调用:
pygame.font.Font(None, font_size)
在这种情况下,valgrind报告在地址0x0处的无效读取?在pygame.font.so
我猜这是因为None被转换为NULL指针,然后假定某个有效的const char *字符串。
此问题的解决方法是始终提供字体的有效路径。
原因2.在字体中渲染unicode字符
pygame.font.Font("data/DejaVuSans.ttf", 14).render(u'\u2654')
valgrind在libpython2.7.so.1.0中报告PyString_AsString中的无效读取
我很遗憾地说我没有解决方案。
PS: 我刚刚发现另一个与cxfreeze相关的unicode相关(但与pygame无关)。
print u'\u2654'
在python解释器中会打印一个王(棋子),但是当用cxfreeze编译脚本时,我得到以下错误(不是分段错误):
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2654' in position 0: ordinal not in range(128)
如果你打电话:
,你也会在python解释器中遇到这个错误print str(u'\u2654')
这似乎表明cxfreeze假设字符串总是ascii字符串。
答案 1 :(得分:0)
冻结脚本时是否设置了任何优化选项?我不太确定它是否这样做,但可能是它错误地将变量更改为引用。同样,我不是cx_freeze的专家,但我的解决方案是更新。你有(cx_freeze)的最新版本吗?
答案 2 :(得分:0)
你有没有谷歌的错误(http://www.google.com/search?&q=Fatal%20Python%20error%3A%20%28pygame%20parachute%29%20Segmentation%20Fault)并查看各种错误报道相同错误的帖子?
E.g。
答案 3 :(得分:0)
我遇到了类似的错误,我想我找到了解决方案。 我正在使用
pygame.font.SysFont(None,25)
但是不要传递None参数,而应该使用系统的字体。 我使用的是Windows机器,所以我用我的系统所拥有的任何字体替换了它。所以我把它换成了:
pygame.font.SysFont("comicsansms",25)
如您所见,我已将无替换为 comicsansms ,这是Windows PC上预装的字体 希望它有效!
答案 4 :(得分:0)
使用
pygame.font.SysFont(FONT_NAME, FONT_SIZE)
。