【Python】pyinstaller:pywin32(win32com)を含んだexeが動作しない問題の解決
2021.10.14 /
本記事ではPythonのpyinstallerで作成した、pywin32(win32com)を含んだexeファイルが動作しない場合の解決方法を解説していきます。
pyinstallerはPythonで作成したプログラムをWindows環境で実行可能なexeファイルにするライブラリです。
pyinstallerについては以下記事をご参照ください。
【Python】pyinstallerでpyファイルを配布用にEXE化する方法
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を使いこなして、業務で使えるプログラムをどんどん作成していってください。