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, представляющего каталог.
Функции, помеченные как устаревшие
Более старое, устаревшее множество функций по-прежнему доступно, но планируется его удаление в будущей версии 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