31.6. "modulefinder" — Identifie les modules utilisés par un script
*******************************************************************

Nouveau dans la version 2.3.

**Code source :** Lib/modulefinder.py

======================================================================

Ce module fournit une classe "ModuleFinder" qui peut être utilisée
pour déterminer la liste des modules importés par un script.
"modulefinder.py" peut aussi être utilisé en tant que script, en
passant le nom du fichier Python en argument, ce qui affichera un
rapport sur les modules importés.

modulefinder.AddPackagePath(pkg_name, path)

   Enregistre que le paquet *pkg_name* peut être trouvé au chemin
   *path* spécifié.

modulefinder.ReplacePackage(oldname, newname)

   Allows specifying that the module named *oldname* is in fact the
   package named *newname*.  The most common usage would be  to handle
   how the "_xmlplus" package replaces the "xml" package.

class modulefinder.ModuleFinder([path=None, debug=0, excludes=[], replace_paths=[]])

   This class provides "run_script()" and "report()" methods to
   determine the set of modules imported by a script. *path* can be a
   list of directories to search for modules; if not specified,
   "sys.path" is used.  *debug* sets the debugging level; higher
   values make the class print  debugging messages about what it’s
   doing. *excludes* is a list of module names to exclude from the
   analysis. *replace_paths* is a list of "(oldpath, newpath)" tuples
   that will be replaced in module paths.

   report()

      Affiche un rapport sur la sortie standard qui liste les modules
      importés par le script et leurs chemins, ainsi que les modules
      manquants ou qui n’ont pas été trouvés.

   run_script(pathname)

      Analyse le contenu du fichier *pathname*, qui doit contenir du
      code Python.

   modules

      Un dictionnaire de correspondance entre nom de modules et
      modules. Voir Exemples d’utilisation de la classe ModuleFinder.


31.6.1. Exemples d’utilisation de la classe "ModuleFinder"
==========================================================

Le script qui sera analysé (*bacon.py*) :

   import re, itertools

   try:
       import baconhameggs
   except ImportError:
       pass

   try:
       import guido.python.ham
   except ImportError:
       pass

Le script qui va afficher le rapport de *bacon.py* :

   from modulefinder import ModuleFinder

   finder = ModuleFinder()
   finder.run_script('bacon.py')

   print 'Loaded modules:'
   for name, mod in finder.modules.iteritems():
       print '%s: ' % name,
       print ','.join(mod.globalnames.keys()[:3])

   print '-'*50
   print 'Modules not imported:'
   print '\n'.join(finder.badmodules.iterkeys())

Exemple de sortie (peut varier en fonction de l’architecture) :

   Loaded modules:
   _types:
   copy_reg:  _inverted_registry,_slotnames,__all__
   sre_compile:  isstring,_sre,_optimize_unicode
   _sre:
   sre_constants:  REPEAT_ONE,makedict,AT_END_LINE
   sys:
   re:  __module__,finditer,_expand
   itertools:
   __main__:  re,itertools,baconhameggs
   sre_parse:  __getslice__,_PATTERNENDERS,SRE_FLAG_UNICODE
   array:
   types:  __module__,IntType,TypeType
   ---------------------------------------------------
   Modules not imported:
   guido.python.ham
   baconhameggs
