modulefinder
— Find modules used by a script¶
Вихідний код: 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