pyinstallerでpywin32がうまく動かないときの対処法

pythonファイルをexe化するときに便利なのがpyinstaller

今回は少しマニアックではあるが、pywin32を使用したプログラムをpyinstallerでexe化したときにうまく動作しなかったのでそちらの解決法について書いておく。

ちなみに今回の現象はpyinstallerの--onefileオプションでexeを1本化しようとしたときに起こるらしい。

目次

The application can not locate Python37.dll

エラー

まずpyinstallerの--onefileオプションでexeを作成し、実行すると以下のようなエラーに直面する場合がある。

pyinstaller実行時ダイアログエラー
win32ui module
The application can not locate Python37.dll (126)
指定されたモジュールが見つかりません。

上記のダイアログが出てそのままexeは終了してしまう..。

そして、コンソールには以下のエラーがつらつらと出てくる。

pyinstaller実行時コンソールエラー

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を作成するという手もある

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

目次
閉じる