3

私が設計した python ゲームを exe に変換しました。exe自体を実行すると、フラッシュしてから閉じます。これは、エラーが発生したことを意味します。コマンドプロンプトから実行してもエラーが発生しますが、それを文書化しています:

Cannot load image: Playfield.png
Couldn't open images\Playfield.png

これは、load_imageブロックが失敗していることを示しています。imagesディレクトリを持っていなかったときに、これに遭遇したことがあります。

imagesフォルダをディレクトリに移動しようとしましたdist。これは表示されるエラーです:

Traceback (most recent call last):
    File "Table_Wars.py", line 728, in <module>
    File "Table_Wars.py", line 51, in main
    File "Table_Wars.py", line 236, in __init__
    File "pygame\__init__.pyc", line 70, in __getattr__
NotImplementedError: font module not available
(ImportError: DLL load failed: The specified module could not be found.)

py2exe を使用するのはこれが初めてなので、何が起こっているのかよくわかりません。生の Python ファイルである Table_Wars.py 自体は、期待どおりに実行されます。

それが役立つ場合、Table_Wars フォルダー全体の場所は、私のデスクトップ (C:\Users\Oventoaster\Desktop\Games\Table_Wars) にある Games というフォルダー内にあります。Windows 7 32 ビット OS を実行しています。

リクエストに応じて、生成した output.txt を次に示します。

Folder PATH listing for volume OS
Volume serial number is 7659-4C9C
C:\USERS\OVENTOASTER\DESKTOP\GAMES\TABLE_WARS
build
   bdist.win32
       winexe
           bundle-2.7
           collect-2.7
              ctypes
              distutils
              email
                 mime
              encodings
              logging
              multiprocessing
                 dummy
              pygame
                 threads
              unittest
              xml
                  parsers
           temp
dist
images

ファイルの変換に使用した setup.py は次のとおりです。

from distutils.core import setup
import py2exe

setup(console=['Table_Wars.py'])

編集:完全な py2exe の例を使用しようとしました。これによりexeが作成されますが、同じCannot load imageエラーが発生します。imagesフォルダーをexeと同じフォルダーに配置しようとすると、Runtime Error: The application requested the runtime to terminate it in an unusual way.

Slace Diamondが提案したコードの短縮形は、py2exeが見つけられないようにしますTable_Wars.py

コマンドから:

running py2exe
*** searching for required modules ***
error: Table_Wars.py: No such file or directory.

setupTable_Wars同じディレクトリにあります。問題がなければ、python.exe と setup.py へのフル パスを入力します。

編集: 近づいているようです。images内にディレクトリを配置しましたがself.extra_datas、今は次のようになっています。

Fatal Python error: (segmentation fault) This application has requested the runtime to terminate it in an unusual way. Please contact the application's suppourt team for more information

4

2 に答える 2

1

py2exe (および py2app) を使用して配布可能なパッケージをビルドする場合、パッケージ環境の一部は、ファイルのローカル リソースの場所を指します。パッケージ化されていない単純なバージョンでは、相対的な「images/」の場所を参照しています。パッケージ化されたバージョンの場合setup.py、独自の場所にリソースを含めるように構成する必要があります。

data_filesパッケージ のオプションを設定する方法に関する非常に具体的な情報については、このドキュメントを参照してください: http://www.py2exe.org/index.cgi/data_files

そのページには、非常に単純なパスと、データを見つけてdata_filesリストを作成するためのヘルパー関数の両方を示す複数の例があります。

簡単なスニペットの例を次に示します。

from distutils.core import setup
import py2exe

Mydata_files = [('images', ['c:/path/to/image/image.png'])]

setup(
    console=['trypyglet.py.py']
    data_files = Mydata_files
    options={
                "py2exe":{
                        "unbuffered": True,
                        "optimize": 2,
                        "excludes": ["email"]
                }
        }
)

これは、達成しようとしているものとほぼ一致します。「image.png」ソース ファイルは、パッケージ内のリソース ロケーションのルートにある「images」ディレクトリに配置する必要があると言っています。このリソース ルートは、Python スクリプトの現在のディレクトリになるため、引き続き相対サブ ディレクトリとして参照できます。

于 2012-06-04T19:44:47.827 に答える
0

フォルダーをdistに移動することで、画像の問題を既に修正しているようです。一方、欠落しているフォント モジュールは、pygame と py2exe の間で既知の問題です。Py2exe はいくつかの必要な DLL をコピーしないため、py2exe のisSystemDLLメソッドをオーバーライドして、オーディオおよびフォント関連の DLL を強制的に含める必要があります。

Table_Wars.py がプロジェクト内の唯一のモジュールである場合は、このスクリプトをpython setup.py py2exe次のように実行してみてください。

from os.path import basename
from distutils.core import setup

import py2exe

origIsSystemDLL = py2exe.build_exe.isSystemDLL
def isSystemDLL(pathname):
    if basename(pathname).lower() in ("libogg-0.dll", "sdl_ttf.dll"):
        return 0
    return origIsSystemDLL(pathname)
py2exe.build_exe.isSystemDLL = isSystemDLL

setup(windows=[{"script": "Table_Wars.py"}],
      options={"py2exe": {"dist_dir": "dist"}})

pygame wiki にあるpy2exe セットアップ ファイルの例を試すこともできます。どちらも機能しない場合は、質問にエラー メッセージを追加してください。


サンプル プロジェクトで py2exe を実行しようとしましたが、既定の pygame フォントを使用すると、問題が発生します。デフォルトのフォントを使用している場合は、ttf ファイルをプロジェクトのルートと dist フォルダーに配置してみてください。pygame.Fontスクリプト内の呼び出しも変更する必要があります。

font = pygame.font.Font("SomeFont.ttf", 28)
于 2012-06-06T05:34:40.937 に答える