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