Pythonファイルをexe化する ⑤

Pythonンプログラムを作っても、他人に渡す時はexeファイルにしないといけません。

コマンドプロンプト(いわゆるDOSプロンプト)上で動作させるプログラム(exeファイル)に
変換するのです。

① 先ず簡単なプログラムをexeファイルにします。

その過程は次のようになります。

cd C:\Users\xxx\デスクトップ\exe_file1
C:\Users\xxx\デスクトップ\exe_file1\pyinstaller -F -w test1.py
  コマンドプロンプト画面で動作するように -w を追加します。

これで30秒位かかりますが、distホルダーの中に”test2.exe”が出来上がります。

開発環境は、W10、Python3.7.3です。

 

② 次は添付画像が必要なプログラムをexeファイルに変換します。

画像、音源、textdataなどまとめたholderを、pythonプログラム(text2.py)と纏めて
exe化したいのです。

cd C:\Users\xxx\デスクトップ\exe_file2
C:\Users\xxx\デスクトップ\exe_file2\pyinstaller -F test2.py
      今回はプロンプト画面は不要ですので -w は付けません。

 

さて、どうなったでしょうか?

 

③ exeを作って動作させると、”画像が有りません”と言われました。

  原因はpyinstaller -Fとしてexeファイルにしても、画像のpathを見つけられませんでした。

  対策が見つかりました。

   exeファイルと一緒にできる  test2.spec にa.datas += [(‘A_1a.png’, ‘.\\A_1a.png’, ‘DATA’)]などの

  pathを追加します。 

   次に C:\Users\xxx\デスクトップ\exe_file2\pyinstaller test2.specとすると今度はしっかりとexeファイルが出来るはずです。

さて、どうなったでしょう?

やっぱりまたエラーでした。

 

次回で絶対成功させます。 ではまた。

 

④ 遂にexe化成功!

時間がないので結論を書きます。

exe化に使うpyinstallerが、外部からimportした画像処理関数と相性が悪かったということらしいです。

使っていた画像処理関数Pillowを次の様に変更しました。

def resource_path(relative_path):
 if hasattr(sys, ‘_MEIPASS’):
  return os.path.join(sys._MEIPASS, relative_path)
 return os.path.join(os.path.abspath(“.”), relative_path)

これを使用して今までのcodeを全部書替えて、上記でtryしていたpyinstallerでexe化したらBingo!

このような問題図が表示されました。

 

 

 

 

 

 

 

 

この絵は、後期高齢者運転免許の更新時に記憶テストされる問題図です。 16個の名前が載ったこの絵を見せられた後30分後位に、何が有ったかの回答を求められます。

これで9月の免許更新試験は大丈夫でしょう!

 

⑤ Exe化後の問題

後期高齢者運転免許の更新は上手く行きました。 多分満点、これだけやれば当たり前かなと思っています。

exeファイルへの変換は上手く行ったのですが、配布には少し問題が有るのでそれを書いてみます。

1.外部ライブラリーなどを利用しているため、それも総合ファイルに組み込まれるためファイルサイズがべらぼうに大きくなります。
  一寸したPythonファイルでも、exeファイルにすると簡単に8~10MBになります。 今はDropBoxを使っていますが、mailでの配布は無理です。

2.テキスト、画像、音声ファイルを使ってる場合は、exe化の際にそのファイルを全て.specというファイルで指定しないといけません(pyinstallerでexe化する場合)。 例えば百人一首などの場合はtext、img、mp3で300個にもなりますので、それを一つ一つ.specファイルで指定するのは、労力・時間の浪費です。

3.ということですので、対応策を考えています。
 ・pyinstaller以外のinstallerを探す(pyinstallerはサイズが大きくならないという記事もあるので駄目かも)
 ・自分にできるVisualBasicやC#で作る(pythonの練習にはならない)
 ・Pythonファイルをwebで働くようにする(PHPなどの勉強も必要になりそう)

 

というところで思考停止してます。

 

 

 

 

Python別館
何回も挫折しているクラスに再挑戦 ①

Python寺子屋も小学部は卒業して中等部に入学です。いままで何回もtryしたクラスの作成ですが、す …

Python別館
Python 1年間のまとめ 関数編 ②

Pythonは関数がないと働きません。関数とは簡単に言うと、特定の処理を纏めたもので、エクセルのSu …

Python別館
Python 1年間のまとめ method編 ③

前稿でwidget(部品)をウインドー(フォーム)上に張り付ける方法を纏めました。今回はそれらにデー …