***以前書いたアメブロの記事から***
WindowsでKivyのアプリをパッケージ(EXEファイル)にする手順はKivyのドキュメンテーションを見れば何とかなると思いますが、
一つのEXEファイルにまとめるためには少し工夫が必要です。
一つのEXEファイルにまとめるとき、PyInstallerはファイルを一つに圧縮して、
起動するとき、Tempディレクトリに展開します。
その時、必要なファイルが見つからないのが多いです。
そのTempディレクトリは環境変数で保存されています。
まず、必要なデータファイルはどこに保存されているか、
正しいパスを得るために、スクリプト内にこの関数が必要です。
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
使い方はこれ。
例えば、アイコンを使うとき、
self.icon = "icon.png"
ではなく、
self.icon = resource_path("icon.png")
でアイコンのパスを得ます。
次に、実際にPyInstallerを使うとき、
必要なファイルを--add-dataというオプションで追加します。
例えば、
pyinstaller -F -w --icon icon.ico --add-data "icon.png;." myapp.py
これでPyInstallerは一回起動しますが、おそらく出来上がりのEXEファイルは実行できません。
なぜかというと、Kivyに必要なインポートはされていませんから。
そこで、specファイルを編集する必要があります。
実際の手順はKivyのドキュメンテーションにありますが、
簡単に言うと、specファイルの冒頭に
from kivy.deps import sdl2, glew
を入れて、COLLECT()のところのa.datasのすぐあとに
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)]
を入れます。
この感じになります。
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
strip=False,
upx=True,
name='myapp')
これができたら、再度PyInstallerを実行します。
pyinstaller myapp.spec
これでdistというサブディレクトリのEXEファイルが動くはずです。
やってみてください✌
0 件のコメント:
コメントを投稿