From b4d2fe93ad71b4328a1bc492f8a3b1eec8b64212 Mon Sep 17 00:00:00 2001 From: pin Date: Thu, 20 May 2010 15:45:43 +0000 Subject: [PATCH] =?utf8?q?Ajout=20du=20script=20de=20d=C3=A9ploiement=20po?= =?utf8?q?ur=20windows=20tel=20qu'il=20existe=20sur=20le=20site=20pygame.o?= =?utf8?q?rg.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@182 fe552daf-6dbe-4428-90eb-1537e0879342 --- setup_win_exe.py | 156 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100755 setup_win_exe.py diff --git a/setup_win_exe.py b/setup_win_exe.py new file mode 100755 index 0000000..de4ccd9 --- /dev/null +++ b/setup_win_exe.py @@ -0,0 +1,156 @@ +# This will create a dist directory containing the executable file, all the data +# directories. All Libraries will be bundled in executable file. +# +# Run the build process by entering 'pygame2exe.py' or +# 'python pygame2exe.py' in a console prompt. +# +# To build exe, python, pygame, and py2exe have to be installed. After +# building exe none of this libraries are needed. + +try: + from distutils.core import setup + import py2exe, pygame + from modulefinder import Module + import glob, fnmatch + import sys, os, shutil + import operator +except ImportError, message: + raise SystemExit, "Unable to load module. %s" % message + +class pygame2exe(py2exe.build_exe.py2exe): #This hack make sure that pygame default font is copied: no need to modify code for specifying default font + def copy_extensions(self, extensions): + #Get pygame default font + pygamedir = os.path.split(pygame.base.__file__)[0] + pygame_default_font = os.path.join(pygamedir, pygame.font.get_default_font()) + + #Add font to list of extension to be copied + extensions.append(Module("pygame.font", pygame_default_font)) + py2exe.build_exe.py2exe.copy_extensions(self, extensions) + +class BuildExe: + def __init__(self): + #Name of starting .py + self.script = "MyApps.py" + + #Name of program + self.project_name = "MyApps" + + #Project url + self.project_url = "about:none" + + #Version of program + self.project_version = "0.0" + + #License of the program + self.license = "MyApps License" + + #Auhor of program + self.author_name = "Me" + self.author_email = "example@example.com" + self.copyright = "Copyright (c) 2009 Me." + + #Description + self.project_description = "MyApps Description" + + #Icon file (None will use pygame default icon) + self.icon_file = None + + #Extra files/dirs copied to game + self.extra_datas = [] + + #Extra/excludes python modules + self.extra_modules = [] + self.exclude_modules = [] + + #DLL Excludes + self.exclude_dll = [''] + + #Zip file name (None will bundle files in exe instead of zip file) + self.zipfile_name = None + + #Dist directory + self.dist_dir ='dist' + + ## Code from DistUtils tutorial at http://wiki.python.org/moin/Distutils/Tutorial + ## Originally borrowed from wxPython's setup and config files + def opj(self, *args): + path = os.path.join(*args) + return os.path.normpath(path) + + def find_data_files(self, srcdir, *wildcards, **kw): + # get a list of all files under the srcdir matching wildcards, + # returned in a format to be used for install_data + def walk_helper(arg, dirname, files): + if '.svn' in dirname: + return + names = [] + lst, wildcards = arg + for wc in wildcards: + wc_name = self.opj(dirname, wc) + for f in files: + filename = self.opj(dirname, f) + + if fnmatch.fnmatch(filename, wc_name) and not os.path.isdir(filename): + names.append(filename) + if names: + lst.append( (dirname, names ) ) + + file_list = [] + recursive = kw.get('recursive', True) + if recursive: + os.path.walk(srcdir, walk_helper, (file_list, wildcards)) + else: + walk_helper((file_list, wildcards), + srcdir, + [os.path.basename(f) for f in glob.glob(self.opj(srcdir, '*'))]) + return file_list + + def run(self): + if os.path.isdir(self.dist_dir): #Erase previous destination dir + shutil.rmtree(self.dist_dir) + + #Use the default pygame icon, if none given + if self.icon_file == None: + path = os.path.split(pygame.__file__)[0] + self.icon_file = os.path.join(path, 'pygame.ico') + + #List all data files to add + extra_datas = [] + for data in self.extra_datas: + if os.path.isdir(data): + extra_datas.extend(self.find_data_files(data, '*')) + else: + extra_datas.append(('.', [data])) + + setup( + cmdclass = {'py2exe': pygame2exe}, + version = self.project_version, + description = self.project_description, + name = self.project_name, + url = self.project_url, + author = self.author_name, + author_email = self.author_email, + license = self.license, + + # targets to build + windows = [{ + 'script': self.script, + 'icon_resources': [(0, self.icon_file)], + 'copyright': self.copyright + }], + options = {'py2exe': {'optimize': 2, 'bundle_files': 1, 'compressed': True, \ + 'excludes': self.exclude_modules, 'packages': self.extra_modules, \ + 'dll_excludes': self.exclude_dll} }, + zipfile = self.zipfile_name, + data_files = extra_datas, + dist_dir = self.dist_dir + ) + + if os.path.isdir('build'): #Clean up build dir + shutil.rmtree('build') + +if __name__ == '__main__': + if operator.lt(len(sys.argv), 2): + sys.argv.append('py2exe') + BuildExe().run() #Run generation + raw_input("Press any key to continue") #Pause to let user see that things ends -- 2.20.1