【Python】pyinstaller:pywin32(win32com)を含んだexeが動作しない問題の解決

時計 2021.10.14 / 時計

【Python】pyinstaller:pywin32(win32com)を含んだexeが動作しない問題の解決

本記事ではPythonpyinstallerで作成した、pywin32win32com)を含んだexeファイルが動作しない場合の解決方法を解説していきます。

pyinstallerはPythonで作成したプログラムをWindows環境で実行可能なexeファイルにするライブラリです。

pyinstallerについては以下記事をご参照ください。

pyinstallerでは様々なライブラリを含んだプログラムをexe化することができます。
しかし多くのライブラリを含んでしまうと、その分エラーが発生する確率も比例して大きくなります。

本記事ではpywin32(win32com)を含んだexeファイルが動作しなくなる問題を取り上げて、その解決までの流れを説明していきます。

Pyinstallerで発生した事象

私は業務において、Pythonで作成したプログラムをpyinstallerでexe化して、スタッフに配布することが多いです。

あるとき作成するプログラムの一つ、エクセルを並び替えするプログラムでpywin32(win32com)を利用しました。

そのプログラムをpyinstallerでexe化し、exeファイルを実行した際に問題が発生しました。

発生した事象

exeファイルを実行した直後にプログラムの動作が止まり、プログラムが落ちてしまう

exe化する際にpyinstallerで—onefileのオプションを追加して作成していましたが、オプションなしでも同様の結果でした。

Pyinstallerのエラー解決

今回の問題の原因は、エクセルの並び替えで利用していたpywin32(win32com)ライブラリでした。

私はpipでpywin32をインストールした際に、最新版のバージョン302がインストールされていました。

>>> pip install pywin32
Successfully installed pywin32-302

しかし新しいバージョンではpyinstallerとの互換性がなかったみたいで、うまくexeファイルに組み込むことができていませんでした。

pyinstallerでうまくexeファイルに組み込めないライブラリはpywin32だけでなく、他にもたくさんあります。

ライブラリによっては--onefileでファイルを一つにしなければ、正常に動作するライブラリもあります。

もしexeファイルが正常に動作しない場合、まずは--onefileを外して試すのもお勧めです。

以前まではpywin32をexeファイルに組み込めていたので、ダウングレードを試したところ、正常に動作するようになりました。

まずインストールしているpywin32をアンインストールします。

>>> pip uninstall pywin32

次にpywin32の過去バージョンをインストールしますが、pywin32のバージョン228では問題なくexeファイルが動作しました。

>>> pip install pywin32==228

正常動作を確認できたときの各バージョンを以下に記します。

  • Python:3.8.8
  • pyinstaller:4.5.1
  • pywin32:228

Pythonのバージョンが最新の3.10系や3.9系ではまた話が変わってくるかもしれないので、Python3.8系での話だと思ってください。

まとめ

本記事「【Python】pyinstaller:pywin32(win32com)を含んだexeが動作しない問題の解決」はいかがでしたか。

pyinstallerはWindowsユーザーにとっては非常に有用なライブラリですが、やっかいなエラーが発生することも多いです。

ぜひpyinstallerを使いこなして、業務で使えるプログラムをどんどん作成していってください。