Python
Selenium
GUI
Tkinter
PyInstaller

pythonのGUIアプリを.exe化

pythonでGUI

pythonには標準ライブラリのtkinterでGUIアプリが作れます。
これを使った案件があって書いたけれども、exe化するのに手間取ったため、記録を残しておきます。

mp3を入れる

このアプリにはアラート音としてmp3のファイルが入れてあります。
.exeにするのにpyinstallerを使いましたが、特殊なケースでもなければ、これだけで出来ます。(もちろん、tkinter等のGUIで書く必要あります)

pyinstaller test.py --onefile --noconsole

オプションで
--onefile 一つのファイルに
--noconsole コンソールが立ち上がらないように
みたいなのもつけられます。

ただし、それだけだとmp3等のファイルを入れることが出来ません。
test.specファイルのdataの場所に追記します。

test.spec
# -*- mode: python -*-

block_cipher = None


a = Analysis(['test.py'],
             pathex=['/Users/*****/test'],
             binaries=[],
             datas=[('./mygame/beep.mp3', 'mygame/sfx')],
             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,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='test',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False )
app = BUNDLE(exe,
             name='test.app',
             icon=None,
             bundle_identifier=None)

mygame/beep.mp3と入れていたのですが、なんども作ってはパスやらファイルの場所を確認して見るとmygame/sfxの中にbeep.mp3が入っているようでした。なので、第2引数にそのように追記です。これでbeep.mp3も読み込むことが出来ました。

seleniumのwebdriver

私の開発環境はmacなのですが、納品されて使用されるのはwindowsでした。そのため、windowsで改めて動作確認をして見た所、動作しない。。。
エラーを見ると、chromeのpathが云々と書いてあります。
そこで、https://www.inet-solutions.jp/technology/python-selenium/参考にさせて頂いて無事動きました。

macだとこれ↓で動くのですが、

test.py
browser = webdriver.Chrome()

windowsだとchromedriverを入れる必要があるのに加え、ファイルの移動、そして↓のように、pathを指定する必要がありました。

test.py
browser = webdriver.Chrome("c://chromedriver.exe")

※chromedriver.exeをcドライブ直下に置きました。

これはクライアントにも同じ場所に同じようにchromedriverを入れてもらう必要がありますね。

 動作確認

改めてpyinstallで.exe化をして完成。
何時間も嵌ってしまいました。。。

参照

pyinstaller リファレンス
iNet Solutions