# `modulefinder` --- Find modules used by a script

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)

  Permet de spécifier que le module nommé oldname est en réalité le paquet nommé newname.

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

  Cette classe fournit les méthodes `run_script()` et `report()` pour déterminer l'ensemble des modules importés par un script. path peut être une liste de dossiers dans lesquels chercher les modules ; si non spécifié, `sys.path` est utilisé. debug définit le niveau de débogage ; des valeurs plus élevées produisent plus de détails sur ce que fait la classe. excludes est une liste de noms de modules à exclure de l'analyse. replace_paths est une liste de paires `(oldpath, newpath)` qui seront remplacés dans les chemins des modules.

  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.

## 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.items():
        print('%s: ' % name, end='')
        print(','.join(list(mod.globalnames.keys())[:3]))

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

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

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