From: Werner F. B. <wer...@fr...> - 2010-01-14 09:47:05
|
Joel Verhagen wrote: > Hey there, > > I'm having some trouble with compiling my pygame. I have Python version > 2.6.4, py2exe 0.6..9, and Pygame 1.9.1. Here is my setup.py script: > > ========================================================== > > # 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 > 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 = "set.py" > > #Name of program > self.project_name = "Set" > > #Project url > self.project_url = "http://www.example.com" > > #Version of program > self.project_version = "1.0" > > #License of the program > self.license = "MyApps LicenseMyApps License" > > #Auhor of program > self.author_name = "Me" > self.author_email = "ex...@ex... > <mailto:ex...@ex...>" > 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 = ['resources'] > > #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 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 > > ========================================================== > > It compiles fine, but when I run my 'set.exe' is creates a error log > with the following contents. > > Traceback (most recent call last): > File "set.py", line 1, in <module> > File "zipextimporter.pyo", line 98, in load_module > ImportError: MemoryLoadLibrary failed loading pygame\font.pyd > > Any ideas on what the problem is and how I can fix it? Try it with bundle_files set to 2 or 3. 1 often causes problems, I personally use 2 with the zip file option. Werner |