modulefinder.md
1> **Источник:** https://python-all.ru/2.7/library/modulefinder.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 31.6. [`modulefinder`](https://python-all.ru/2.7/library/modulefinder.html#module-modulefinder) – Поиск модулей, используемых скриптом89Новое в версии 2.3.1011**Исходный код:** [Lib/modulefinder.py](https://python-all.ru/src/2.7/Lib/modulefinder.py)1213---1415Этот модуль предоставляет класс [`ModuleFinder`](https://python-all.ru/2.7/library/modulefinder.html#modulefinder.ModuleFinder), который можно использовать для определения набора модулей, импортированных сценарием. `modulefinder.py` также можно запускать как сценарий, передав имя файла Python-сценария в качестве аргумента, после чего будет выведен отчёт об импортированных модулях.1617#### `modulefinder.AddPackagePath(pkg_name, path)`1819Записывает, что пакет с именем *pkg\_name* можно найти по указанному *пути*.2021#### `modulefinder.ReplacePackage(oldname, newname)`2223Позволяет указать, что модуль с именем *oldname* на самом деле является пакетом с именем *newname*. Наиболее распространённый вариант использования – обработка того, как пакет `_xmlplus` заменяет пакет [`xml`](https://python-all.ru/2.7/library/xml.html#module-xml).2425#### `class modulefinder.ModuleFinder([path=None, debug=0, excludes=[], replace_paths=[]])`2627Этот класс предоставляет методы [`run_script()`](https://python-all.ru/2.7/library/modulefinder.html#modulefinder.ModuleFinder.run_script) и [`report()`](https://python-all.ru/2.7/library/modulefinder.html#modulefinder.ModuleFinder.report) для определения набора модулей, импортированных скриптом. *path* может быть списком каталогов для поиска модулей; если не указан, используется `sys.path`. *debug* задаёт уровень отладки; более высокие значения заставляют класс печатать отладочные сообщения о своих действиях. *excludes* – это список имён модулей, исключаемых из анализа. *replace\_paths* – это список кортежей `(oldpath, newpath)`, которые будут заменены в путях модулей.2829#### `report()`3031Выводит в стандартный вывод отчёт со списком модулей, импортированных сценарием, и их путей, а также модулей, которые отсутствуют или, возможно, отсутствуют.3233#### `run_script(pathname)`3435Анализирует содержимое файла *pathname*, который должен содержать код Python.3637#### `modules`3839Словарь, сопоставляющий имена модулей с модулями. См. [Пример использования ModuleFinder](https://python-all.ru/2.7/library/modulefinder.html#modulefinder-example).4041## 31.6.1. Пример использования [`ModuleFinder`](https://python-all.ru/2.7/library/modulefinder.html#modulefinder.ModuleFinder)4243Сценарий, который будет проанализирован позже (bacon.py):4445```python46import re, itertools4748try:49 import baconhameggs50except ImportError:51 pass5253try:54 import guido.python.ham55except ImportError:56 pass57```5859Сценарий, который выведет отчёт для bacon.py:6061```python62from modulefinder import ModuleFinder6364finder = ModuleFinder()65finder.run_script('bacon.py')6667print 'Loaded modules:'68for name, mod in finder.modules.iteritems():69 print '%s: ' % name,70 print ','.join(mod.globalnames.keys()[:3])7172print '-'*5073print 'Modules not imported:'74print '\n'.join(finder.badmodules.iterkeys())75```7677Пример вывода (может отличаться в зависимости от архитектуры):7879```python80Loaded modules:81_types:82copy_reg: _inverted_registry,_slotnames,__all__83sre_compile: isstring,_sre,_optimize_unicode84_sre:85sre_constants: REPEAT_ONE,makedict,AT_END_LINE86sys:87re: __module__,finditer,_expand88itertools:89__main__: re,itertools,baconhameggs90sre_parse: __getslice__,_PATTERNENDERS,SRE_FLAG_UNICODE91array:92types: __module__,IntType,TypeType93---------------------------------------------------94Modules not imported:95guido.python.ham96baconhameggs97```98