win32comextのモジュールを使用したスクリプトをpy2exeで実行形式にする


Windows環境でPythonスクリプトを実行形式(exe)にするには、py2exeがよく使用されますよね。
私もよく利用させてもらっています。


で、今回はwin32com(win32拡張モジュールの1つ)の機能を使用したスクリプト
py2exeでexeにする際のメモです。


たとえば、win32com.directsound.directsoundなどのようなモジュールを使用したスクリプト
をpy2exeでexeにし、実行しようとすると、実行時エラーが発生します。
これは、実行ファイルに必要なファイルが不足しているためです。

win32comモジュールの__init__.pyを見るとなんとなく原因がわかります。
directsoundモジュールは、win32comextに属しているのですが、あたかもwin32comのサブモジュール
であるかのように扱えるようにwin32comの__init__.pyに細工がしてあるわけです。
py2exeはそのあたりの事情は知らないので、パッケージをまとめようとした際に
win32comext中に含まれているモジュールを正しく見つけることができないようです。

これを回避するための方法は、以下のサイトに紹介されています。

サイト:http://www.py2exe.org/index.cgi/WinShell

私も上記のサイトを参考にsetup.pyを修正したところ、問題が解決しました。


いやはや、勉強になりました。