> **Источник:** https://python-all.ru/3.0/library/pkgutil.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `pkgutil` – Утилита расширения пакетов

Этот модуль предоставляет функции для работы с пакетами:

#### `[pkgutil.extend_path]pkgutil.extend_path(path, name)`

Расширяет путь поиска для модулей, составляющих пакет. Предполагаемое использование – разместить следующий код в `__init__.py` пакета:

```python
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
```

Это добавит в `__path__` пакета все подкаталоги каталогов из `sys.path`, названные в честь пакета. Это полезно, если нужно распространять разные части одного логического пакета в виде нескольких каталогов.

Также ищет файлы `*.pkg`, начиная с того места, где `*` совпадает с аргументом *name*. Эта функция похожа на файлы `*.pth` (см. модуль [`site`](https://python-all.ru/3.0/library/site.html#module-site) для получения дополнительной информации), за исключением того, что она не обрабатывает особым образом строки, начинающиеся с `import`. Файл `*.pkg` принимается как есть: помимо проверки на дубликаты, все записи, найденные в файле `*.pkg`, добавляются в путь, независимо от того, существуют ли они в файловой системе. (Это особенность.)

Если входной путь не является списком (как в случае замороженных пакетов), он возвращается без изменений. Входной путь не модифицируется; возвращается расширенная копия. Элементы добавляются только в конец этой копии.

Предполагается, что `sys.path` является последовательностью. Элементы `sys.path`, которые не являются строками, ссылающимися на существующие каталоги, игнорируются. Элементы Unicode в `sys.path`, которые вызывают ошибки при использовании в качестве имен файлов, могут привести к тому, что эта функция вызовет исключение (в соответствии с поведением [`os.path.isdir()`](https://python-all.ru/3.0/library/os.path.html#os.path.isdir)).

#### `[pkgutil.get_data]pkgutil.get_data(package, resource)`

Получить ресурс из пакета.

Это обёртка для API [`get_data()`](https://python-all.ru/3.0/library/pkgutil.html#pkgutil.get_data) загрузчика PEP 302. Аргумент package должен быть именем пакета в стандартном формате модуля (foo.bar). Аргумент resource должен быть относительным именем файла, с использованием `/` в качестве разделителя путей. Имя родительского каталога `..` не допускается, равно как и абсолютное имя (начинающееся с `/`).

Функция возвращает двоичную строку, содержащую указанный ресурс.

Для пакетов, расположенных в файловой системе, которые уже были импортированы, это приблизительный эквивалент следующего:

```python
d = os.path.dirname(sys.modules[package].__file__)
data = open(os.path.join(d, resource), 'rb').read()
```

Если пакет не удается найти или загрузить, или он использует загрузчик PEP 302, не поддерживающий [`get_data()`](https://python-all.ru/3.0/library/pkgutil.html#pkgutil.get_data), то возвращается None.
