import sys, os from Ft.Lib.DistExt import ModuleFinder try: from py2exe import build_exe except ImportError: # Fake it out for non-Windows systems to allow for documenting this file import new build_exe = new.module('py2exe.build_exe') build_exe.py2exe = new.classobj('py2exe', (), {'__module__' : 'py2exe.build_exe'}) class py2exe(build_exe.py2exe): """ Command class replacement for py2exe's that adds Ft extension module's hidden imports and package data. """ def parse_mf_results(self, mf): """ Overridden to add our "hidden" imports. """ ModuleFinder.AddHiddenModules(mf) return build_exe.py2exe.parse_mf_results(self, mf) def plat_finalize(self, modules, py_files, extensions, dlls): """ Overridden to also find any package data files. """ build_exe.py2exe.plat_finalize( self, modules, py_files, extensions, dlls) self.data_files = ModuleFinder.GetModuleIncludes(modules) return def copy_extensions(self, extensions): """ Overridden to also copy any hidden package data files to the target directory. """ print "*** copy package data files ***" for source, target in self.data_files: # add it to the files to be stored in the ZIP archive self.compiled_files.append(target) target = os.path.join(self.collect_dir, target) self.mkpath(os.path.dirname(target)) self.copy_file(source, target) # continue on to copying the extensions return build_exe.py2exe.copy_extensions(self, extensions) # Replace default py2exe command class module with this one sys.modules['distutils.command.py2exe'] = sys.modules[__name__]