modulefinder — Знайти модулі, які використовуються сценарієм

Вихідний код: Lib/modulefinder.py


Цей модуль надає клас ModuleFinder, який можна використовувати для визначення набору модулів, імпортованих сценарієм. modulefinder.py також можна запустити як сценарій, надаючи назву файлу сценарію Python як аргумент, після чого буде надруковано звіт про імпортовані модулі.

modulefinder.AddPackagePath(pkg_name, path)

Запишіть, що пакет із назвою pkg_name можна знайти у вказаному шляху.

modulefinder.ReplacePackage(oldname, newname)

Дозволяє вказати, що модуль з назвою oldname насправді є пакетом з назвою newname.

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

Цей клас надає методи run_script() і report() для визначення набору модулів, імпортованих сценарієм. шлях може бути списком каталогів для пошуку модулів; якщо не вказано, використовується sys.path. debug встановлює рівень налагодження; вищі значення змушують клас друкувати повідомлення про те, що він робить. excludes — список імен модулів, які потрібно виключити з аналізу. replace_paths — це список кортежів (oldpath, newpath), які будуть замінені в шляхах модуля.

report()

Роздрукуйте звіт у стандартний вихід із переліком модулів, імпортованих сценарієм, і їхніх шляхів, а також модулів, які відсутні або здаються відсутніми.

run_script(pathname)

Проаналізуйте вміст файлу pathname, який повинен містити код Python.

modules

Словник зіставляє імена модулів із модулями. Див. Приклад використання ModuleFinder.

Приклад використання ModuleFinder

Сценарій, який буде проаналізовано пізніше (bacon.py):

import re, itertools

try:
    import baconhameggs
except ImportError:
    pass

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

Сценарій, який виведе звіт 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()))

Зразок вихідних даних (може відрізнятися залежно від архітектури):

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