modulefinder — Find modules used by a script

Quellcode: Lib/modulefinder.py


Dieses Modul stellt die Klasse ModuleFinder bereit, mit der sich die Menge der von einem Skript importierten Module ermitteln lässt. modulefinder.py kann auch selbst als Skript ausgeführt werden, wobei der Dateiname eines Python-Skripts als Argument übergeben wird; anschließend wird ein Bericht über die importierten Module ausgegeben.

modulefinder.AddPackagePath(pkg_name, path)

Vermerkt, dass das Paket namens pkg_name unter dem angegebenen path zu finden ist.

modulefinder.ReplacePackage(oldname, newname)

Ermöglicht es anzugeben, dass das Modul namens oldname in Wirklichkeit das Paket namens newname ist.

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

Diese Klasse stellt die Methoden run_script() und report() bereit, um die Menge der von einem Skript importierten Module zu ermitteln. path kann eine Liste von Verzeichnissen sein, in denen nach Modulen gesucht wird; ohne Angabe wird sys.path verwendet. debug legt die Debugging-Stufe fest. Bei höheren Werten gibt die Klasse Meldungen darüber aus, was sie gerade tut. excludes ist eine Liste von Modulnamen, die von der Analyse ausgenommen werden. replace_paths ist eine Liste von Tupeln der Form (oldpath, newpath), die in Modulpfaden ersetzt werden.

report()

Gibt auf der Standardausgabe einen Bericht aus, der die vom Skript importierten Module und ihre Pfade auflistet sowie Module, die fehlen oder zu fehlen scheinen.

run_script(pathname)

Analysiert den Inhalt der Datei pathname, die Python-Code enthalten muss.

modules

Ein Dictionary, das Modulnamen auf Module abbildet. Siehe Beispielhafte Verwendung von ModuleFinder.

Beispielhafte Verwendung von ModuleFinder

Das Skript, das später analysiert werden soll (bacon.py):

import re, itertools

try:
    import baconhameggs
except ImportError:
    pass

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

Das Skript, das den Bericht zu bacon.py ausgibt:

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

Beispielausgabe (kann je nach Architektur abweichen):

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