Spec-Zone.ru › Python 3.12

importlib.resources – Чтение, открытие и доступ к ресурсам пакетов

Исходный код: Lib/importlib/resources/__init__.py

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

Этот модуль использует систему импорта Python для предоставления доступа к ресурсам внутри пакетов.

«Ресурсы» — это подобные файлам ресурсы, связанные с модулем или пакетом в Python. Ресурсы могут быть размещены непосредственно в пакете, внутри подкаталога этого пакета или рядом с модулями вне пакета. Ресурсы могут быть текстовыми или двоичными. В результате, исходные коды Python-модулей (.py) пакета и файлы компиляции (pycache) технически являются ресурсами этого пакета. Однако на практике, ресурсы, в первую очередь, представляют собой те не-Python артефакты, которые явно предоставляет автор пакета.

Ресурсы могут быть открыты или считаны в двоичном или текстовом режиме.

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

Примечание

Этот модуль предоставляет функциональность, аналогичную pkg_resources Основной доступ к ресурсам, но без избыточной нагрузки на производительность этого пакета. Это упрощает чтение ресурсов, включенных в пакеты, с более стабильными и согласованными семантиками.

Автономный портированный модуль предоставляет более подробную информацию о использовании importlib.resources и переходе от pkg_resources к importlib.resources.

Loaders, которые хотят поддерживать чтение ресурсов, должны реализовать метод get_resource_reader(fullname), как указано в importlib.resources.abc.ResourceReader.

class importlib.resources.Anchor

Представляет якорную точку для ресурсов, либо module object, либо имя модуля в виде строки. Определено как Union[str, ModuleType].

importlib.resources.files(anchor: Anchor | None = None)

Возвращает объект Traversable, представляющий контейнер ресурсов (каталог) и его ресурсы (файлы). Traversable может содержать другие контейнеры (подкаталоги).

anchor — необязательный Anchor. Если anchor — это пакет, ресурсы разрешаются из этого пакета. Если модуль, ресурсы разрешаются рядом с этим модулем (в том же пакете или в корне пакета). Если anchor опущен, используется модуль вызывающего кода.

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

Изменено в версии 3.12: Параметр package был переименован в anchor. anchor теперь может быть не-пакетом модуля, и если он опущен, по умолчанию используется модуль вызывающего кода. package по-прежнему принимается для совместимости, но будет генерировать DeprecationWarning. Рекомендуется передавать anchor позиционно или использовать importlib_resources >= 5.10 для совместимого интерфейса в более старых версиях Python.

importlib.resources.as_file(traversable)

Принимая объект Traversable, представляющий файл или каталог, обычно из importlib.resources.files(), возвращает менеджер контекста для использования в операторе with. Менеджер контекста предоставляет объект pathlib.Path.

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

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

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

Изменено в версии 3.12: Добавлена поддержка traversable, представляющего каталог.

END_OF_DOCUMENT_MARKER ```

Функции, помеченные как устаревшие

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

importlib.resources.Package

Всякий раз, когда функция принимает аргумент Package, вы можете передать либо объект module object, либо имя модуля в виде строки. Вы можете передавать только объекты модулей, чья __spec__.submodule_search_locations не является None.

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

Устарело начиная с версии 3.12.

importlib.resources.Resource

Для аргументов ресурса функций ниже вы можете передать имя ресурса в виде строки или объект path-like object.

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

importlib.resources.open_binary(package, resource)

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

Пакет — это либо имя, либо объект модуля, который соответствует требованиям Package. Ресурс — это имя ресурса, который нужно открыть внутри пакета; он не должен содержать разделители путей и не должен иметь подресурсы (т. е. не может быть каталогом). Эта функция возвращает экземпляр typing.BinaryIO — двоичный поток ввода-вывода, открытый для чтения.

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

files(package).joinpath(resource).open('rb')
importlib.resources.open_text(package, resource, encoding='utf-8', errors='strict')

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

Пакет — это либо имя, либо объект модуля, который соответствует требованиям Package. Ресурс — это имя ресурса, который нужно открыть внутри пакета; он не должен содержать разделители путей и не должен иметь подресурсы (т. е. не может быть каталогом). encoding и errors имеют то же значение, что и для встроенной функции open().

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

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

files(package).joinpath(resource).open('r', encoding=encoding)
importlib.resources.read_binary(package, resource)

Считывает и возвращает содержимое ресурса внутри пакета как bytes.

Пакет — это либо имя, либо объект модуля, который соответствует требованиям Package. Ресурс — это имя ресурса, который нужно открыть внутри пакета; он не должен содержать разделители путей и не должен иметь подресурсы (т. е. не может быть каталогом). Эта функция возвращает содержимое ресурса как bytes.

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

files(package).joinpath(resource).read_bytes()
importlib.resources.read_text(package, resource, encoding='utf-8', errors='strict')

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

Пакет — это либо имя, либо объект модуля, который соответствует требованиям Package. Ресурс — это имя ресурса, который нужно открыть внутри пакета; он не должен содержать разделители путей и не должен иметь подресурсы (т. е. не может быть каталогом). encoding и errors имеют то же значение, что и для встроенной функции open(). Эта функция возвращает содержимое ресурса как str.

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

files(package).joinpath(resource).read_text(encoding=encoding)
importlib.resources.path(package, resource)

Возвращает путь к ресурсу как фактический путь в файловой системе. Эта функция возвращает менеджер контекста для использования в операторе with. Менеджер контекста предоставляет объект pathlib.Path.

Выход из менеджера контекста очищает любые временные файлы, созданные, когда ресурс нужно извлечь, например, из файла zip.

Пакет — это либо имя, либо объект модуля, который соответствует требованиям Package. Ресурс — это имя ресурса, который нужно открыть внутри пакета; он не должен содержать разделители путей и не должен иметь подресурсы (т. е. не может быть каталогом).

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

as_file(files(package).joinpath(resource))
importlib.resources.is_resource(package, name)

Возвращает True, если в пакете есть ресурс с именем name, в противном случае False. Эта функция не рассматривает каталоги как ресурсы. Пакет — это либо имя, либо объект модуля, который соответствует требованиям Package.

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

files(package).joinpath(resource).is_file()
importlib.resources.contents(package)

Возвращает итерируемый объект по именованным элементам внутри пакета. Итерируемый объект возвращает str ресурсы (например, файлы) и нересурсы (например, каталоги). Итерируемый объект не рекурсивно входит в подкаталоги.

Пакет — это либо имя, либо объект модуля, который соответствует требованиям Package.

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

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

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/importlib.resources.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API