2016-04-18 7 views
1
img_l = pygame.image.load("img.png") 
screen.blit(img_l) 

での作業ではありません。Pygame.image.load()それは問題なく罰金、画像が読み込まれ、<code>main.py</code>の実行を動作しますが、私はpyInstallerの持つ一つのファイル<code>.exe</code>、<code>.exe</code>クラッシュにそれを作るときのPythonインタプリタでpyInstallerの

私はいくつかの修正を試したことがありますが、私が見つけたものはほとんど手伝っていないようです。

誠にありがとうございます。

EDIT:それはで作業ました:

img_l = pygame.image.load(os.path.join('img.png')) 
screen.blit(img_l, (0, 0)) 

今ではpyInstallerのを通過した後にそれが必要として働いて:)

+1

プログラムがクラッシュしたときに例外トレースバックを取得していますか?情報のない問題を診断するのは難しいです。私の最初の推測は、 'img.png'はあなたのプログラムが期待している場所にないので、読み込むことができないということでしょう。 – Blckknght

+0

私は 'fatal error:main returned -1'を取得しました。 'img.png'を' .exe'と同じ場所に追加しようとしましたが、動作しません。あなたが言ったことから、私はちょうど 'img.png'がPyInstallerと同じ場所にある必要があるという考えを得ました...テストしよう:編集しないでください。 –

+1

現在の作業ディレクトリを出力する行を追加する価値があります。そうすれば、アプリケーションがファイルを探している場所を具体的に見ることができます。 'import os; print os.getcwd(); ' –

答えて

0

はそれがで作業しました:今

img_l = pygame.image.load(os.path.join('img.png')) 
screen.blit(img_l, (0, 0)) 

それPyInstallerを通過した後、正常に動作します:)

1

申し訳ありませんが、私はプログラミングに非常に新しいです。私が実行しようとする は、私が(?同じ)、同様のエラーを取得しています私の.exe それは言う:

pygame.error: Can't seek in this data source 
:私はあなたが使用する修正を試みたが、その後、エラーを得
pygame.error: Couldn't open walkr1.png 

イメージファイルは、メインの.pyファイルのフォルダ内のフォルダにあります。私は同じフォルダにファイルを移動しようとしましたが、うまくいきませんでした。私はまた、.specファイルにデータファイルを追加しようとしましたが、どちらもうまく動作していないようです... あなたが助けることができるかどうか疑問に思っていましたか? 申し訳ありませんが、これらはおそらく非常にばかな質問です。

0

同じ問題を抱えていて、@ Esaの答えを試したことのある人は、ディレクトリ外で実行すると動作しないことがあります。これはPyinstallerが引き続き相対パスを検索し、インクルードされたファイルを使用しないために発生します。これは、ファイルをロードする前に、あなたのコード内の正しいパスを見つけることによって固定することができます。

if getattr(sys, 'frozen', False): 
    Path = sys._MEIPASS    #This is for when the program is frozen 
else: 
    Path = os.path.dirname(__file__) #This is when the program normally runs 

これは、ファイルの実際のパスを発見し、例えば、すべてのファイルに対して実行する必要があります。

pygame.image.load(os.path.join(Path, 'Path\\to_file\\from_root')) 

sys._MEIPASSですキーは、プログラムがフリーズしたときにプログラムがフリーズしたときのパスを見つけるので、ファイルは別の場所に保存されます。

.exeファイルを生成すると、.specファイルもルートディレクトリとともに作成されます。そこでは、次のようにこれを編集する必要があります。

  1. あなたはdatasNoneに等しいどのよう
  2. お知らせ以下のようなファイル構造が表示されるはずです。これを編集する必要があります。

これは、現在のルートディレクトリで.specファイルです。今、私たちは何をすべきか

# -*- mode: python -*- 

block_cipher = None 

#you will have to add things here later 

a = Analysis(['file.py'], 
      pathex=['C:\\path\\to\\root\\folder'], 
      binaries=None, 
      datas=None, 
      hiddenimports=[], 
      hookspath=[], 
      runtime_hooks=[], 
      excludes=[], 
      win_no_prefer_redirects=False, 
      win_private_assemblies=False, 
      cipher=block_cipher) 
pyz = PYZ(a.pure, a.zipped_data, 
      cipher=block_cipher) 
exe = EXE(pyz, 
      a.scripts, 
      exclude_binaries=True, 
      name='game_file', 
      debug=False, 
      strip=False, 
      upx=True, 
      console=True , icon='icon_file.ico') 

は、我々はすべて私たちのファイルを追加します:場所このadded_filesblock_cipher以下が、Analysis()以上、例えば:

added_files = [ 
       ('file1.png', '.')  #The '.' represents root folder 
       ('file2.png', '\\folder') #loads file2.png from root\folder 
       ] 

Analysis()の内部には、datasの後にNoneが変更され、added_filesに変更されました。また、最終的なファイルの主な異なるオプションがあることに気づくでしょう。これらのファイルは必要に応じて編集できますが、 "onefile"オプションを変更することはできません。これは.specファイルが作成されたときに行われます。

最後に、この新しいEXEファイルを作成するCMDであなたのルートフォルダに移動し、これを入力する:

pyinstaller "PY_FILE_NAME.spec" 

最終exeファイル、フォルダ内にあるか否かが、ルートの\ distの\ Executable_name.exeにする必要がありますまたはroot \ dist \ Executable_name \ Executable_name.exe

関連する問題

 関連する問題