diff --git a/Mac/Lib/findmodulefiles.py b/Mac/Lib/findmodulefiles.py new file mode 100644 index 00000000000..0a55c8fa446 --- /dev/null +++ b/Mac/Lib/findmodulefiles.py @@ -0,0 +1,91 @@ +"""Findmodulefiles - Find out where modules are loaded from. +Run findmodulefiles() after running a program with "python -i". The +resulting file list can be given to mkfrozenresources or to a +(non-existent) freeze-like application. + +findmodulefiles will create a file listing all modules and where they have +been imported from. + +findunusedbuiltins takes a list of (modules, file) and prints all builtin modules +that are _not_ in the list. The list is created by opening the findmodulefiles +output, reading it and eval()ing that. + +mkpycresource takes a list of (module, file) and creates a resourcefile with all those +modules and (optionally) a main module. +""" + +def findmodulefiles(output=None): + """Produce a file containing a list of (modulename, filename-or-None) + tuples mapping module names to source files""" + # Immedeately grab the names + import sys + module_names = sys.modules.keys()[:] + import os + if not output: + if os.name == 'mac': + import macfs + + output, ok = macfs.StandardPutFile('Module file listing output:') + if not ok: sys.exit(0) + output = output.as_pathname() + if not output: + output = sys.stdout + elif type(output) == type(''): + output = open(output, 'w') + output.write('[\n') + for name in module_names: + try: + source = sys.modules[name].__file__ + except AttributeError: + source = None + else: + source = `source` + output.write('\t(%s,\t%s),\n' % (`name`, source)) + output.write(']\n') + del output + +def findunusedbuiltins(list): + """Produce (on stdout) a list of unused builtin modules""" + import sys + dict = {} + for name, location in list: + if location == None: + dict[name] = 1 + for name in sys.builtin_module_names: + if not dict.has_key(name): + print 'Unused builtin module:', name + + +def mkpycresourcefile(list, main='', dst=None): + """Copy list-of-modules to resource file dst.""" + import py_resource + import Res + import sys + + if dst == None: + import macfs + fss, ok = macfs.StandardPutFile("PYC Resource output file") + if not ok: sys.exit(0) + dst = fss.as_pathname() + if main == '': + import macfs + fss, ok = macfs.PromptGetFile("Main program:", "TEXT") + if ok: + main = fss.as_pathname() + + fsid = py_resource.create(dst) + + if main: + id, name = py_resource.frompyfile(main, '__main__', preload=1) + print '%5d\t%s\t%s'%(id, name, main) + for name, location in list: + if not location: continue + if location[-3:] != '.py': + print '*** skipping', location + continue + id, name = py_resource.frompyfile(location, name, preload=1) + print '%5d\t%s\t%s'%(id, name, location) + + Res.CloseResFile(fsid) + +