py2exeとwin32com.shell


py2exeがwin32com.shellを上手く検索してくれなくてハマった。



解決法をメモしておく。(と、いってもhttp://www.py2exe.org/index.cgi/WinShellの丸写しなんだけども。)

from distutils.core import setup
import py2exe
#ここから
try:
    # if this doesn't work, try import modulefinder
    import py2exe.mf as modulefinder
    import win32com
    for p in win32com.__path__[1:]:
        modulefinder.AddPackagePath("win32com", p)
    for extra in ["win32com.shell"]:
        __import__(extra)
        m = sys.modules[extra]
        for p in m.__path__[1:]:
            modulefinder.AddPackagePath(extra, p)
except ImportError:
    # no build path setup, no worries.
    pass
#ここまでのゴニョゴニョをすると、
#win32com.shellをちゃんとexeに含んでくれる。
#何をやってるのか、まだよく分かってないのだけど

py2exe_options = {
    'compressed': 1,
    'optimize': 0,
    'includes': [],
    'excludes': [],
    'dll_excludes': [],
    'packages': [],
    'bundle_files': 2
    }

setup(
    options = {'py2exe': py2exe_options},
    console = [{
        'script' : 'Calendar.py',
        'icon_resources': [],
        'other_resources': [],
    }],
    data_files = [],
    zipfile = None)