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

---

# [`importlib.resources`](https://python-all.ru/3.11/library/importlib.resources.html#module-importlib.resources) – чтение, открытие и доступ к ресурсам пакетов

**Исходный код:** [Lib/importlib/resources/\_\_init\_\_.py](https://python-all.ru/src/3.11/Lib/importlib/resources/__init__.py)

---

Добавлено в версии 3.7.

Этот модуль использует систему импорта Python для предоставления доступа к *ресурсам* внутри *пакетов*. Если пакет можно импортировать, то можно получить доступ к ресурсам внутри этого пакета. Ресурсы можно открывать или читать в двоичном или текстовом режиме.

Ресурсы примерно аналогичны файлам в каталогах, хотя важно помнить, что это всего лишь метафора. Ресурсы и пакеты **не** обязаны существовать в виде физических файлов и каталогов в файловой системе: например, пакет и его ресурсы могут быть импортированы из zip-файла с помощью [`zipimport`](https://python-all.ru/3.11/library/zipimport.html#module-zipimport).

> **Примечание**
>
> Этот модуль предоставляет функциональность, аналогичную [pkg\_resources](https://python-all.ru/3.11/library/importlib.resources.html) [Базовый доступ к ресурсам](https://python-all.ru/3.11/library/importlib.resources.html) без накладных расходов на производительность, присущих тому пакету. Это упрощает чтение ресурсов, входящих в состав пакетов, обеспечивая более стабильную и последовательную семантику.
>
> Автономный бэкпорт этого модуля предоставляет дополнительную информацию об [использовании importlib.resources](https://python-all.ru/3.11/library/importlib.resources.html) и [миграции с pkg\_resources на importlib.resources](https://python-all.ru/3.11/library/importlib.resources.html).

[`Loaders`](https://python-all.ru/3.11/library/importlib.html#importlib.abc.Loader), которые хотят поддерживать чтение ресурсов, должны реализовать метод `get_resource_reader(fullname)`, как указано в [`importlib.resources.abc.ResourceReader`](https://python-all.ru/3.11/library/importlib.resources.abc.html#importlib.resources.abc.ResourceReader).

#### `class importlib.resources.Package`

Если функция принимает аргумент `Package`, можно передать либо [`module object`](https://python-all.ru/3.11/library/types.html#types.ModuleType), либо имя модуля в виде строки. Можно передавать только объекты модулей, у которых `__spec__.submodule_search_locations` не равно `None`.

Тип `Package` определён как `Union[str, ModuleType]`.

#### `importlib.resources.files(package)`

Возвращает объект [`Traversable`](https://python-all.ru/3.11/library/importlib.resources.abc.html#importlib.resources.abc.Traversable), представляющий контейнер ресурсов для пакета (аналог каталога) и его ресурсы (аналог файлов). Объект Traversable может содержать другие контейнеры (аналог подкаталогов).

*package* – это либо имя, либо объект модуля, соответствующий требованиям [`Package`](https://python-all.ru/3.11/library/importlib.resources.html#importlib.resources.Package).

Новое в версии 3.9.

#### `importlib.resources.as_file(traversable)`

Принимает объект [`Traversable`](https://python-all.ru/3.11/library/importlib.resources.abc.html#importlib.resources.abc.Traversable), представляющий файл (обычно из [`importlib.resources.files()`](https://python-all.ru/3.11/library/importlib.resources.html#importlib.resources.files)), и возвращает менеджер контекста для использования в операторе [`with`](https://python-all.ru/3.11/reference/compound_stmts.html#with). Менеджер контекста предоставляет объект [`pathlib.Path`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path).

Выход из менеджера контекста удаляет все временные файлы, созданные при извлечении ресурса, например, из zip-файла.

Используйте `as_file`, когда методов Traversable (`read_text` и т. д.) недостаточно и требуется реальный файл в файловой системе.

Новое в версии 3.9.

## Устаревшие функции

Старый устаревший набор функций по-прежнему доступен, но запланирован к удалению в одной из будущих версий Python. Основной недостаток этих функций в том, что они не поддерживают каталоги: предполагается, что все ресурсы находятся непосредственно внутри *пакета*.

#### `importlib.resources.Resource`

Для аргументов *resource* в функциях ниже можно передать имя ресурса в виде строки или [`path-like object`](https://python-all.ru/3.11/library/os.html#os.PathLike).

Тип `Resource` определён как `Union[str, os.PathLike]`.

#### `importlib.resources.open_binary(package, resource)`

Открывает *ресурс* внутри *пакета* для двоичного чтения.

*package* – это либо имя, либо объект модуля, соответствующий требованиям `Package`. *resource* – имя ресурса для открытия внутри *package*; он не должен содержать разделителей пути и не может иметь подресурсов (т.е. не может быть каталогом). Эта функция возвращает экземпляр `typing.BinaryIO` – двоичный поток I/O, открытый для чтения.

Устарело с версии 3.11: Вызовы этой функции можно заменить на:

```python
files(package).joinpath(resource).open('rb')
```

#### `importlib.resources.open_text(package, resource, encoding='utf-8', errors='strict')`

Открывает *ресурс* внутри *пакета* для текстового чтения. По умолчанию ресурс открывается для чтения в кодировке UTF-8.

*package* – это либо имя, либо объект модуля, соответствующий требованиям `Package`. *resource* – имя ресурса для открытия внутри *package*; он не должен содержать разделителей пути и не может иметь подресурсов (т.е. не может быть каталогом). *encoding* и *errors* имеют то же значение, что и во встроенной [`open()`](https://python-all.ru/3.11/library/functions.html#open).

Эта функция возвращает экземпляр `typing.TextIO` – текстовый поток I/O, открытый для чтения.

Устарело с версии 3.11: Вызовы этой функции можно заменить на:

```python
files(package).joinpath(resource).open('r', encoding=encoding)
```

#### `importlib.resources.read_binary(package, resource)`

Читает и возвращает содержимое *ресурса* внутри *пакета* в виде `bytes`.

*package* – это либо имя, либо объект модуля, соответствующий требованиям `Package`. *resource* – имя ресурса для открытия внутри *package*; он не должен содержать разделителей пути и не может иметь подресурсов (т.е. не может быть каталогом). Эта функция возвращает содержимое ресурса в виде [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes).

Устарело с версии 3.11: Вызовы этой функции можно заменить на:

```python
files(package).joinpath(resource).read_bytes()
```

#### `importlib.resources.read_text(package, resource, encoding='utf-8', errors='strict')`

Читает и возвращает содержимое *ресурса* внутри *пакета* в виде `str`. По умолчанию содержимое читается как строгий UTF-8.

*package* – это либо имя, либо объект модуля, соответствующий требованиям `Package`. *resource* – имя ресурса для открытия внутри *package*; он не должен содержать разделителей пути и не может иметь подресурсов (т.е. не может быть каталогом). *encoding* и *errors* имеют то же значение, что и во встроенной [`open()`](https://python-all.ru/3.11/library/functions.html#open). Эта функция возвращает содержимое ресурса в виде [`str`](https://python-all.ru/3.11/library/stdtypes.html#str).

Устарело с версии 3.11: Вызовы этой функции можно заменить на:

```python
files(package).joinpath(resource).read_text(encoding=encoding)
```

#### `importlib.resources.path(package, resource)`

Возвращает путь к *ресурсу* в виде реального пути файловой системы. Эта функция возвращает менеджер контекста для использования в операторе [`with`](https://python-all.ru/3.11/reference/compound_stmts.html#with). Менеджер контекста предоставляет объект [`pathlib.Path`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path).

При выходе из менеджера контекста удаляются все временные файлы, созданные при извлечении ресурса, например, из zip-файла.

*package* – это либо имя, либо объект модуля, соответствующий требованиям `Package`. *resource* – имя ресурса для открытия внутри *package*; он не должен содержать разделителей пути и не может иметь подресурсов (т.е. не может быть каталогом).

Устарело с версии 3.11: Вызовы этой функции можно заменить с помощью [`as_file()`](https://python-all.ru/3.11/library/importlib.resources.html#importlib.resources.as_file):

```python
as_file(files(package).joinpath(resource))
```

#### `importlib.resources.is_resource(package, name)`

Возвращает `True`, если в пакете существует ресурс с именем *name*, иначе `False`. Эта функция не считает каталоги ресурсами. *package* – это либо имя, либо объект модуля, соответствующий требованиям `Package`.

Устарело с версии 3.11: Вызовы этой функции можно заменить на:

```python
files(package).joinpath(resource).is_file()
```

#### `importlib.resources.contents(package)`

Возвращает итератор по именованным элементам внутри пакета. Итератор возвращает [`str`](https://python-all.ru/3.11/library/stdtypes.html#str) ресурсы (например, файлы) и не-ресурсы (например, каталоги). Итератор не заходит в подкаталоги.

*package* – это либо имя, либо объект модуля, соответствующий требованиям `Package`.

Устарело с версии 3.11: Вызовы этой функции можно заменить на:

```python
(resource.name for resource in files(package).iterdir() if resource.is_file())
```
