31.6. modulefinder — Procura módulos usados por um script

Novo na versão 2.3.

Código-fonte: Lib/modulefinder.py


Este módulo fornece uma classe ModuleFinder que pode ser usada para determinar o conjunto de módulos importados por um script. O modulefinder.py também pode ser executado como um script, fornecendo o nome do arquivo de um script Python como seu argumento, após o qual um relatório dos módulos importados será impresso.

modulefinder.AddPackagePath(pkg_name, path)

Registra que o pacote chamado pkg_name pode ser encontrado no caminho especificado em path

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()

Imprime um relatório na saída padrão que lista os módulos importados pelo script e seus caminhos, bem como os módulos que estão faltando ou parecem estar ausentes.

run_script(pathname)

Analisa o conteúdo do arquivo pathname, que deve conter o código Python.

modules

Um nome de módulo de mapeamento de dicionário para módulos. Veja Exemplo de uso de ModuleFinder.

31.6.1. Exemplo de uso de ModuleFinder

O script que será analisado posteriormente (bacon.py):

import re, itertools

try:
    import baconhameggs
except ImportError:
    pass

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

O script que irá gerar o relatório 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())

Exemplo de saída (pode variar dependendo da arquitetura):

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