2017-02-15 8 views
2

私はpyinstallerで1つのファイルexeをビルドしようとしていますが、イメージのファイルパスがメインのpythonファイルに含まれるはずです。pyinstallerのバンドルされたイメージのファイルパス?

root.iconbitmap('C:\\Users\\username\\Downloads\\TripApp\\BennySM.ico') 
filename = PhotoImage(file = 'C:\\Users\\username\\Downloads\\TripApp\\BgSM.gif') 

I:

def resource_path(relative_path): 
""" Get absolute path to resource, works for dev and for PyInstaller """ 
try: 
    # PyInstaller creates a temp folder and stores path in _MEIPASS 
    base_path = sys._MEIPASS 
except Exception: 
    base_path = os.path.abspath(".") 

return os.path.join(base_path, relative_path) 

From this page

は、これは私が各画像ファイルを持っている現在のコードです:私はMEIPASSコードを使用私のメインのpythonファイルの先頭に

これらは最高のファイルパスではないことを知っていますが、私はPythonファイルがどこに見えるかを知るために何を追加する必要があるのか​​分かりません。画像はexeでバンドルされ、exeをデータファイルに追加すると画像と実行が見つかります。

ありがとうございました!前にresource_pathを追加しようとしましたが、上のdefineセクションにファイルパスがありませんでした。

もう一度おねがいします!

答えて

0

質問:pyinstallerで作成したプログラムでデータファイルを使用するにはどうすればよいですか?

てみましょう最初のスクリプトとして実行したときのPythonスクリプトは、現在動作していることを前提とし、次の行がスクリプトであること:

filename = PhotoImage(file='C:\\Users\\username\\Downloads\\TripApp\\BgSM.gif') 

この行は、スクリプトはからファイルを取得していることを示し、 (おそらくベストプラクティスではありませんが、例としては問題ありません)、.gifファイルをPhotoImage()オブジェクトインスタンスに変換してください。これが私たちのベースラインになります。

スクリプトがpyinstallerビルドされたプログラムとして実行されている場合、このファイルを正常に使用するには3つのことが必要です。 pyInstallerのビルド時

1に、このステップは `.spec」ファイルにdatasディレクティブを追加することによって達成される既知の位置

にファイルを移動します。それを行う方法の詳細については、this postを参照してください。しかし要するに、これは必要です:

datas=[ 
    ('C:\\Users\\test\\Downloads\\TripApp\\BgSM.gif', 'data'), 
    ... 
], 

タプルには2つの要素があることに注意してください。最初の要素は、pyinstallerの実行可能ファイルにパッケージ化する前の作業用pythonスクリプトに存在する、.gifファイルのパスです。タプルの2番目の要素は、実行可能ファイルの実行時にファイルが格納されるディレクトリです。実行時に

2、ここで私たちの.gifファイル

を見つけるには、質問、使用することを改作の例から関数です:

  1. は、例から、絶対パス、ときにスクリプト
  2. スクリプトがpyinstaller構築プログラムとして実行されたときに、datasタプルで指定されたパス。

コード:ベースラインは、だから今我々はへのパスを構築することができることを私たちのpyInstallerの構築されたプログラム

で動作するようにリキャスト

def resource_path(relative_path): 
    """ Get absolute path to resource, works for dev and for PyInstaller """ 
    try: 
     # PyInstaller creates a temp folder and stores path in _MEIPASS, 
     # and places our data files in a folder relative to that temp 
     # folder named as specified in the datas tuple in the spec file 
     base_path = os.path.join(sys._MEIPASS, 'data') 
    except Exception: 
     # sys._MEIPASS is not defined, so use the original path 
     base_path = 'C:\\Users\\test\\Downloads\\TripApp' 

    return os.path.join(base_path, relative_path) 

3。 gifファイルをスクリプトとして実行する場合、またはpyinstaller構築プログラムとして実行する場合、ベースラインは次のようになります。

filename = PhotoImage(file=resource_path('BgSM.gif')) 
関連する問題