modulefinder.md
1> **Источник:** https://python-all.ru/3.6/library/modulefinder.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 31.3. [`modulefinder`](https://python-all.ru/3.6/library/modulefinder.html#module-modulefinder) – Поиск модулей, используемых скриптом89**Исходный код:** [Lib/modulefinder.py](https://python-all.ru/src/3.6/Lib/modulefinder.py)1011---1213Этот модуль предоставляет класс [`ModuleFinder`](https://python-all.ru/3.6/library/modulefinder.html#modulefinder.ModuleFinder), который можно использовать для определения набора модулей, импортированных сценарием. `modulefinder.py` также можно запускать как сценарий, передав имя файла Python-сценария в качестве аргумента, после чего будет выведен отчёт об импортированных модулях.1415#### `modulefinder.AddPackagePath(pkg_name, path)`1617Записывает, что пакет с именем *pkg\_name* можно найти по указанному *пути*.1819#### `modulefinder.ReplacePackage(oldname, newname)`2021Позволяет указать, что модуль с именем *oldname* на самом деле является пакетом с именем *newname*.2223#### `class modulefinder.ModuleFinder(path=None, debug=0, excludes=[], replace_paths=[])`2425Этот класс предоставляет методы [`run_script()`](https://python-all.ru/3.6/library/modulefinder.html#modulefinder.ModuleFinder.run_script) и [`report()`](https://python-all.ru/3.6/library/modulefinder.html#modulefinder.ModuleFinder.report) для определения набора модулей, импортированных сценарием. *path* может быть списком каталогов для поиска модулей; если не указан, используется `sys.path`. *debug* задаёт уровень отладки; более высокие значения заставляют класс выводить отладочные сообщения о том, что он делает. *excludes* – это список имён модулей, исключаемых из анализа. *replace\_paths* – это список кортежей `(oldpath, newpath)`, которые будут заменены в путях модулей.2627#### `report()`2829Выводит в стандартный вывод отчёт со списком модулей, импортированных сценарием, и их путей, а также модулей, которые отсутствуют или, возможно, отсутствуют.3031#### `run_script(pathname)`3233Анализирует содержимое файла *pathname*, который должен содержать код Python.3435#### `modules`3637Словарь, сопоставляющий имена модулей с модулями. См. [Пример использования ModuleFinder](https://python-all.ru/3.6/library/modulefinder.html#modulefinder-example).3839## 31.3.1. Пример использования [`ModuleFinder`](https://python-all.ru/3.6/library/modulefinder.html#modulefinder.ModuleFinder)4041Сценарий, который будет проанализирован позже (bacon.py):4243```python44import re, itertools4546try:47 import baconhameggs48except ImportError:49 pass5051try:52 import guido.python.ham53except ImportError:54 pass55```5657Сценарий, который выведет отчёт для bacon.py:5859```python60from modulefinder import ModuleFinder6162finder = ModuleFinder()63finder.run_script('bacon.py')6465print('Loaded modules:')66for name, mod in finder.modules.items():67 print('%s: ' % name, end='')68 print(','.join(list(mod.globalnames.keys())[:3]))6970print('-'*50)71print('Modules not imported:')72print('\n'.join(finder.badmodules.keys()))73```7475Пример вывода (может отличаться в зависимости от архитектуры):7677```python78Loaded modules:79_types:80copyreg: _inverted_registry,_slotnames,__all__81sre_compile: isstring,_sre,_optimize_unicode82_sre:83sre_constants: REPEAT_ONE,makedict,AT_END_LINE84sys:85re: __module__,finditer,_expand86itertools:87__main__: re,itertools,baconhameggs88sre_parse: _PATTERNENDERS,SRE_FLAG_UNICODE89array:90types: __module__,IntType,TypeType91---------------------------------------------------92Modules not imported:93guido.python.ham94baconhameggs95```96