2

私はubuntuとpython2.6を使用しています

システムにcxフリーズがすでにインストールされているのを見つけました(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

私は何をすべきか?検索しましたが、例がほとんど見つかりませんでした。Googleの結果にこのエラーは表示されませんでした。

psもちろん、cxfreezeを使用する前はプログラムは完全に実行されていました

4

5 に答える 5

1

Python 2.7を使用して同様の問題が発生しています。私は自分のプログラムでこのセグメンテーション違反の原因を 2 つ見つけましたが、解決策はそのうちの 1 つしかありません。

原因 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 に関する別のユニコード関連 (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 文字列であると想定していることを示しているようです。

于 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) を Google で検索し、同じエラーを報告しているさまざまな投稿を確認しましたか? ?

例えば

于 2011-04-24T06:34:43.580 に答える
0

を使用し pygame.font.SysFont(FONT_NAME, FONT_SIZE)ます。

于 2017-01-04T19:04:42.320 に答える