0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

実行ファイルEXEでwxpythonのGUI上でhtmlが表示されない場合

Last updated at Posted at 2023-04-16

実行環境

python 3.10.9

foliumで生成したOSMの地図をwxpythonのGUIで表示するというプログラムを作成しましたが、pyinstallerを使用してexe化した際に地図がGUI上に表示されないという問題にハマったので備忘録的に記載します。
wx.html2.WebViewがexe化したときに正常に動作していないようでした

直接使用するライブラリ

まず、pyinstallerでexe化する際にライブラリで必要なものをpipでインストールします。

pip install folium wxpython pyinstaller

依存関係のあるライブラリ

foliumを含むPythonスクリプトをexe化するために必要なライブラリは、pyinstallerが必要とするライブラリの他に、pywin32やsetuptoolsなど、Windows環境で必要なライブラリが必要になります。

したがって、foliumを含むPythonスクリプトをexe化するために必要なライブラリは、以下のものになります。

pip install pywin32 setuptools

これらのライブラリを含めて、Pythonスクリプトをexe化することで、foliumを含むPythonスクリプトを実行可能ファイルとして作成することができます。

pipでインストールしたバージョン

folium 0.14.0
wxPython 4.2.0

exe化実行

1 Pythonスクリプトを作成する。

foliumを使用したPythonスクリプトを作成します。
wx.html2.WebViewでSetPageを使ってhtmlページを表示する

2 pyinstallerを使用して、Pythonスクリプトを実行可能ファイルに変換する。

pyinstallerを使用してfoliumを含むPythonスクリプトを実行可能ファイルに変換する場合、foliumが依存するライブラリに加えて、pyinstallerが必要とするライブラリを含める必要があります。

pyinstaller your_script.py --hidden-import jinja2 --hidden-import markupsafe --hidden-import branca --hidden-import requests --hidden-import urllib3 --hidden-import chardet --hidden-import certifi --hidden-import flask --hidden-import werkzeug

上記のコマンドでは、foliumを含むPythonスクリプトをyour_script.pyに置き換えてください。また、foliumが依存するライブラリの他に、pyinstallerが必要とするライブラリも--hidden-importオプションを使用して指定しています。

3 pyinstallerのdatasパラメータを使用して、バイナリやJavaScriptファイルを実行可能ファイルに含める

変換が完了したら、2のコマンドで生成されたyour_script.specファイルを編集して、foliumが依存するJavaScriptファイル(例えばLeafletやjQuery)やwxpythonで必要なバイナリを含める必要があります。
ここで、wxPython(4.2.0)ではWebView2Loader.dllをAdd Binaryとして指定する必要があります。
参考 :https://github.com/wxWidgets/Phoenix/issues/2234

your_script.spec
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
    ['your_script.py'],
    pathex=[],
    binaries=[('.venv\\Lib\\site-packages\\wx\\WebView2Loader.dll', '.')],
    datas=[('.\\\\.venv\\\\Lib\\\\site-packages\\\\branca\\\\*.json', 'branca')],
    hiddenimports=['jinja2', 'markupsafe', 'branca', 'requests', 'urllib3', 'chardet', 'certifi', 'flask', 'werkzeug'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='your_app',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='your_script',
)

4 pyinstallerを再度実行してexe化

pyinstaller your_script.spec

上記のような手順で作成したexeファイルで、foliumで作成したhtml地図をwxpythonのGUI上に表示することができました。
(参考URL先では過去のwxpythonのバージョンではバイナリ追加手順は必要なかったようなので、過去のバージョンにするのも手かと、、、)

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?