pythonファイルをexe化するときに便利なのがpyinstaller
今回は少しマニアックではあるが、pywin32を使用したプログラムをpyinstallerでexe化したときにうまく動作しなかったのでそちらの解決法について書いておく。
ちなみに今回の現象はpyinstallerの--onefile
オプションでexeを1本化しようとしたときに起こるらしい。
The application can not locate Python37.dll
エラー
まずpyinstallerの--onefile
オプションでexeを作成し、実行すると以下のようなエラーに直面する場合がある。

win32ui module
The application can not locate Python37.dll (126)
指定されたモジュールが見つかりません。
上記のダイアログが出てそのままexeは終了してしまう..。
そして、コンソールには以下のエラーがつらつらと出てくる。

RuntimeError: The win32ui module could not initialize the application object.
win32ui(pywin32)モジュールがなんとなく原因のようだ。
いろいろ調べてみると、バージョンによってはpyinstallerの--onefile
オプションとpywin32の互換性がないことがあるのでそれが原因だそう。
(ちなみにpyinstallerは--onefile
オプションを付けなければうまく動作する。)
解決方法
pywin32のバージョンをダウングレードすると良いです。
最新のpywin32はVer.330ですが、Ver.228にすることでうまく動作しました。(僕の環境では)
pip install pywin32==228
以下動作確認バージョン
- Python 3.7.5
- pywin32==228
- pyinstaller==4.2
Python3.8系でもpywin32==228で動作するようですが、Python3.9系になるとpywin32==228でも動作しなくなる。
いずれも--onefile
オプションを使用した場合なので、どうしても動作しない場合は1本化せずにexeを作成するという手もある
コメント