2

我正在使用 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

我该怎么办?我已经搜索过,但我发现的例子很少,而且我在谷歌结果中没有看到这个错误

ps 当然,在使用 cx freeze 之前程序运行良好

4

5 回答 5

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:我刚刚发现了另一个与 unicode 相关(但与 pygame 无关)导致 cxfreeze 问题的原因。

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 字符串。

于 2013-01-27T15:58:48.053 回答
0

冻结脚本时是否设置了任何优化选项?我不太确定它是否这样做,但可能是它错误地将变量更改为引用。同样,我不是 cx_freeze 的专家,但我的解决方案是更新。你有最新版本(cx_freeze)吗?

于 2011-04-20T15:03:15.890 回答
0

你用谷歌搜索你的错误(http://www.google.com/search?&q=Fatal%20Python%20error%3A%20%28pygame%20parachute%29%20Segmentation%20Fault)并检查报告相同错误的各种帖子?

例如

于 2011-04-24T06:34:43.580 回答
0

我遇到了类似的错误,我想我已经找到了解决方案。我在用

pygame.font.SysFont(None,25)

但是,您应该使用系统的字体,而不是传递 None 参数。我使用的是 windows 机器,所以我没有用我的系统拥有的任何字体替换。所以我将其替换为:

pygame.font.SysFont("comicsansms",25)

正如你所看到的,我已经用comicsansms替换了None ,它是Windows PC上预装的字体希望它可以工作!

于 2016-10-18T08:42:44.883 回答
0

使用 pygame.font.SysFont(FONT_NAME, FONT_SIZE).

于 2017-01-04T19:04:42.320 回答