Pythonで作成したツール等をexe化したい場合、Pyinstallerを使うと
> pyinstaller --onefile --icon=icon.ico -n appname app.py
のような感じで簡単にexe化することができて便利です。
ただこのままだと、例えばexe起動時にスプラッシュ画面を表示したい場合、
exeのあるフォルダ等に別途スプラッシュ画像を用意する必要があります。
Pyinstallerで出力したexeにリソースを含めたい場合は、
・リソースフォルダを作る
・リソースフォルダにアクセスする関数を作る
・pyinstallerでリソースを含めたexeを作る
を行う必要があります。
- リソースフォルダを作る
resources等の名前でリソースを置くフォルダを作成します
- リソースフォルダにアクセスする関数を作る
import sys
import os
def resourcePath(filename):
if hasattr(sys, "_MEIPASS"):
return os.path.join(sys._MEIPASS, filename)
return os.path.join(filename)
のようなリソースパスを取得する関数を作成しておき、
tmpimg = cv2.imread(resourcePath("resources/img.png"))
のような形で使用することができます。
- pyinstallerでリソースを含めたexeを作る
> pyinstaller --onefile --icon=icon.ico -n appname app.py
のように一度exeを作成すると、appname.spec というファイルが作成されるのでこれをテキストエディタで開きます。
exe = EXE(pyz,
a.scripts,
a.binaries,
という部分があるので、ここに
exe = EXE(pyz,
Tree('resources',prefix='resources'), #<-
a.scripts,
a.binaries,
のように定義を追加し、
> pyinstaller appname.spec
を実行し、再度exeを作成するとリソースフォルダを含んだexeが作成されます。