1:mod:`modulefinder` --- Find modules used by a script 2===================================================== 3 4.. module:: modulefinder 5 :synopsis: Find modules used by a script. 6.. sectionauthor:: A.M. Kuchling <amk@amk.ca> 7 8 9.. versionadded:: 2.3 10 11**Source code:** :source:`Lib/modulefinder.py` 12 13-------------- 14 15This module provides a :class:`ModuleFinder` class that can be used to determine 16the set of modules imported by a script. ``modulefinder.py`` can also be run as 17a script, giving the filename of a Python script as its argument, after which a 18report of the imported modules will be printed. 19 20 21.. function:: AddPackagePath(pkg_name, path) 22 23 Record that the package named *pkg_name* can be found in the specified *path*. 24 25 26.. function:: ReplacePackage(oldname, newname) 27 28 Allows specifying that the module named *oldname* is in fact the package named 29 *newname*. The most common usage would be to handle how the :mod:`_xmlplus` 30 package replaces the :mod:`xml` package. 31 32 33.. class:: ModuleFinder([path=None, debug=0, excludes=[], replace_paths=[]]) 34 35 This class provides :meth:`run_script` and :meth:`report` methods to determine 36 the set of modules imported by a script. *path* can be a list of directories to 37 search for modules; if not specified, ``sys.path`` is used. *debug* sets the 38 debugging level; higher values make the class print debugging messages about 39 what it's doing. *excludes* is a list of module names to exclude from the 40 analysis. *replace_paths* is a list of ``(oldpath, newpath)`` tuples that will 41 be replaced in module paths. 42 43 44 .. method:: report() 45 46 Print a report to standard output that lists the modules imported by the 47 script and their paths, as well as modules that are missing or seem to be 48 missing. 49 50 .. method:: run_script(pathname) 51 52 Analyze the contents of the *pathname* file, which must contain Python 53 code. 54 55 .. attribute:: modules 56 57 A dictionary mapping module names to modules. See 58 :ref:`modulefinder-example`. 59 60 61.. _modulefinder-example: 62 63Example usage of :class:`ModuleFinder` 64-------------------------------------- 65 66The script that is going to get analyzed later on (bacon.py):: 67 68 import re, itertools 69 70 try: 71 import baconhameggs 72 except ImportError: 73 pass 74 75 try: 76 import guido.python.ham 77 except ImportError: 78 pass 79 80 81The script that will output the report of bacon.py:: 82 83 from modulefinder import ModuleFinder 84 85 finder = ModuleFinder() 86 finder.run_script('bacon.py') 87 88 print 'Loaded modules:' 89 for name, mod in finder.modules.iteritems(): 90 print '%s: ' % name, 91 print ','.join(mod.globalnames.keys()[:3]) 92 93 print '-'*50 94 print 'Modules not imported:' 95 print '\n'.join(finder.badmodules.iterkeys()) 96 97Sample output (may vary depending on the architecture):: 98 99 Loaded modules: 100 _types: 101 copy_reg: _inverted_registry,_slotnames,__all__ 102 sre_compile: isstring,_sre,_optimize_unicode 103 _sre: 104 sre_constants: REPEAT_ONE,makedict,AT_END_LINE 105 sys: 106 re: __module__,finditer,_expand 107 itertools: 108 __main__: re,itertools,baconhameggs 109 sre_parse: __getslice__,_PATTERNENDERS,SRE_FLAG_UNICODE 110 array: 111 types: __module__,IntType,TypeType 112 --------------------------------------------------- 113 Modules not imported: 114 guido.python.ham 115 baconhameggs 116 117 118