modulefinder — Module, die von einem Skript verwendet werden, finden

Quellcode: Lib/modulefinder.py


Dieses Modul stellt eine Klasse ModuleFinder bereit, mit der die Menge der von einem Skript importierten Module ermittelt werden kann. modulefinder.py kann auch 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)

Aufzeichnen, dass das Paket mit dem Namen pkg_name im angegebenen path gefunden werden kann.

modulefinder.ReplacePackage(oldname, newname)

Ermöglicht die Angabe, dass das Modul mit dem Namen oldname tatsächlich das Paket mit dem Namen newname ist.

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

Diese Klasse bietet die Methoden run_script() und report(), um die Menge der von einem Skript importierten Module zu ermitteln. path kann eine Liste von Verzeichnissen sein, in denen nach Modulen gesucht werden soll. Wenn nicht angegeben, wird sys.path verwendet. debug legt die Debugging-Stufe fest; höhere Werte führen dazu, dass die Klasse Debugging-Meldungen über ihre Aktivitäten ausgibt. excludes ist eine Liste von Modulnamen, die von der Analyse ausgeschlossen werden sollen. replace_paths ist eine Liste von Tupeln (oldpath, newpath), die in Modulpfaden ersetzt werden.

report()

Gibt einen Bericht an die Standardausgabe aus, der die vom Skript importierten Module und ihre Pfade sowie fehlende oder anscheinend fehlende Module auflistet.

run_script(pathname)

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

modules

Ein Wörterbuch, das Modulnamen auf Module abbildet. Siehe Beispielverwendung von ModuleFinder.

Beispielverwendung 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 für 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()))

Beispielhafte Ausgabe (kann je nach Architektur variieren)

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