# `importlib.resources` – Leitura, abertura e acesso a recursos de pacotes

Código-fonte: Lib/importlib/resources/__init__.py

Adicionado na versão 3.7.

Esse módulo aproveita o sistema de importação do Python para fornecer acesso a recursos dentro de pacotes.

“Recursos” são recursos arquivo ou similares associados a um módulo ou pacote em Python. Os recursos podem estar contidos diretamente em um pacote, em um subdiretório contido nesse pacote ou adjacentes a módulos fora de um pacote. Os recursos podem ser de texto ou binários. Como resultado, as fontes de módulos Python de um pacote (.py), artefatos de compilação (pycache) e artefatos de instalação (como `nomes de arquivos reservados` em diretórios) são tecnicamente recursos de fato desse pacote. Na prática, entretanto, os recursos são principalmente os artefatos não-Python expostos especificamente pelo autor do pacote.

Os recursos podem ser abertos ou lidos no modo binário ou de texto.

Os recursos são mais ou menos semelhantes a arquivos dentro de diretórios, embora seja importante ter em mente que isso é apenas uma metáfora. Recursos e pacotes não precisam existir como arquivos e diretórios físicos no sistema de arquivos: por exemplo, um pacote e seus recursos podem ser importados de um arquivo zip usando `zipimport`.

Nota

Esse módulo fornece funcionalidade semelhante ao Basic Resource Access do pkg_resources sem a sobrecarga de desempenho desse pacote. Isso facilita a leitura de recursos incluídos em pacotes, com uma semântica mais estável e consistente.

O backport autônomo desse módulo fornece mais informações sobre uso do importlib.resources e migração do pkg_resources para o importlib.resources.

`Loaders` que desejam oferecer suporte à leitura de recursos devem implementar um método `get_resource_reader(fullname)` conforme especificado por `importlib.resources.abc.ResourceReader`.

class importlib.resources.Anchor

  Representa uma âncora para recursos, seja um `objeto módulo` ou um nome de módulo como uma string. Definido como `Union[str, ModuleType]`.

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

  Retorna um objeto `Traversable` que representa o contêiner de recursos (pense em diretório) e seus recursos (pense em arquivos). Um Traversable pode conter outros contêineres (pense em subdiretórios).

  anchor é um `Anchor` opcional. Se a âncora for um pacote, os recursos são resolvidos a partir desse pacote. Se for um módulo, os recursos são resolvidos ao lado desse módulo (no mesmo pacote ou na raiz do pacote). Se a âncora for omitida, o módulo do chamador é usado.

  Adicionado na versão 3.9.

  Alterado na versão 3.12: O parâmetro package foi renomeado para anchor. anchor agora pode ser um módulo sem ser pacote e, se omitido, será o módulo do chamador por padrão. package ainda é aceito por compatibilidade, mas irá levantar um `DeprecationWarning`. Considere passar a posição da âncora de forma posicional ou usar `importlib_resources >= 5.10` para uma interface compatível em versões mais antigas do Python.

importlib.resources.as_file(traversable)

  Dado um objeto `Traversable` que representa um arquivo ou diretório, normalmente de `importlib.resources.files()`, retorna um gerenciador de contexto para uso em uma instrução `with`. O gerenciador de contexto fornece um objeto `pathlib.Path`.

  Sair do gerenciador de contexto limpa qualquer arquivo ou diretório temporário criado quando o recurso foi extraído, por exemplo, de um arquivo zip.

  Use `as_file` quando os métodos de Traversable (`read_text`, etc.) forem insuficientes e for necessário um arquivo ou diretório real no sistema de arquivos.

  Adicionado na versão 3.9.

  Alterado na versão 3.12: Adicionado suporte para traversable representando um diretório.

## API funcional

Um conjunto de auxiliares simplificados e compatíveis com versões anteriores está disponível. Estes permitem operações comuns em uma única chamada de função.

Para todas as funções a seguir:

- anchor é um `Anchor`, assim como em `files()`. Ao contrário do comportamento em `files`, anchor aqui não pode ser omitido.

- path_names são componentes do nome do caminho de um recurso, relativo à âncora. Por exemplo, para obter o texto de um recurso chamado `info.txt`, use:

      importlib.resources.read_text(my_module, "info.txt")

  Assim como em `Traversable.joinpath`, os componentes individuais devem usar barras ordinárias (`/`) como separadores do caminho. Por exemplo, as seguintes chamadas são equivalentes:

      importlib.resources.read_binary(my_module, "pics/painting.png")
      importlib.resources.read_binary(my_module, "pics", "painting.png")

  Por motivos de compatibilidade com versões anteriores, funções que leem texto requerem um argumento encoding explícito se múltiplos path_names forem fornecidos. Por exemplo, para obter o texto de `info/chapter1.txt`, use:

      importlib.resources.read_text(my_module, "info", "chapter1.txt",
                                    encoding='utf-8')

importlib.resources.open_binary(anchor, *path_names)

  Abre o recurso nomeado para leitura binária.

  Veja a introdução para detalhes sobre anchor e path_names.

  Esta função retorna um objeto `BinaryIO`, isto é, um fluxo binário aberto para leitura.

  Esta função é mais ou menos equivalente a:

      files(anchor).joinpath(*path_names).open('rb')

  Alterado na versão 3.13: Múltiplos path_names são aceitos.

importlib.resources.open_text(anchor, *path_names, encoding='utf-8', errors='strict')

  Abre o recurso nomeado para leitura de texto. Por padrão, o conteúdo é lido como UTF-8 estrito.

  Veja a introdução para detalhes sobre anchor e path_names. encoding e errors têm o mesmo significado que na embutida `open()`.

  Por motivos de compatibilidade com versões anteriores, o argumento encoding precisa ser passado explicitamente se houver múltiplos path_names. Essa limitação está agendada para ser removida no Python 3.15.

  Esta função retorna um objeto `TextIO`, isto é, um fluxo de texto aberto para leitura.

  Esta função é mais ou menos equivalente a:

      files(anchor).joinpath(*path_names).open('r', encoding=encoding)

  Alterado na versão 3.13: Múltiplos path_names são aceitos. encoding e errors precisam ser fornecidos como argumentos nomeados.

importlib.resources.read_binary(anchor, *path_names)

  Lê e retorna o conteúdo do recurso nomeado como `bytes`.

  Veja a introdução para detalhes sobre anchor e path_names.

  Esta função é mais ou menos equivalente a:

      files(anchor).joinpath(*path_names).read_bytes()

  Alterado na versão 3.13: Múltiplos path_names são aceitos.

importlib.resources.read_text(anchor, *path_names, encoding='utf-8', errors='strict')

  Lê e retorna o conteúdo do recurso nomeado como `str`. Por padrão, o conteúdo é lido como UTF-8 estrito.

  Veja a introdução para detalhes sobre anchor e path_names. encoding e errors têm o mesmo significado que na embutida `open()`.

  Por motivos de compatibilidade com versões anteriores, o argumento encoding precisa ser passado explicitamente se houver múltiplos path_names. Essa limitação está agendada para ser removida no Python 3.15.

  Esta função é mais ou menos equivalente a:

      files(anchor).joinpath(*path_names).read_text(encoding=encoding)

  Alterado na versão 3.13: Múltiplos path_names são aceitos. encoding e errors precisam ser fornecidos como argumentos nomeados.

importlib.resources.path(anchor, *path_names)

  Fornece o caminho para o resource como um caminho real do sistema de arquivos. Essa função retorna um gerenciador de contexto para uso em uma instrução `with`. O gerenciador de contexto fornece um objeto `pathlib.Path`.

  Sair do gerenciador de contexto limpa qualquer arquivo temporário criado, por exemplo quando o recurso precisa ser extraído de um arquivo zip.

  Por exemplo, o método `stat()` requer um caminho real em um sistema de arquivos; ele pode ser usado assim:

      with importlib.resources.path(anchor, "resource.txt") as fspath:
          result = fspath.stat()

  Veja a introdução para detalhes sobre anchor e path_names.

  Esta função é mais ou menos equivalente a:

      as_file(files(anchor).joinpath(*path_names))

  Alterado na versão 3.13: Múltiplos path_names são aceitos. encoding e errors precisam ser fornecidos como argumentos nomeados.

importlib.resources.is_resource(anchor, *path_names)

  Retorna `True` se o recurso nomeado existe, senão `False`. Esta função não considera diretórios como sendo recursos.

  Veja a introdução para detalhes sobre anchor e path_names.

  Esta função é mais ou menos equivalente a:

      files(anchor).joinpath(*path_names).is_file()

  Alterado na versão 3.13: Múltiplos path_names são aceitos.

importlib.resources.contents(anchor, *path_names)

  Retorna um iterável sobre os itens nomeados no pacote ou caminho. O iterável retorna nomes de recursos (por exemplo, arquivos) e outros itens que não recursos (por exemplo, diretórios) como `str`. O iterável não recorre em subdiretórios.

  Veja a introdução para detalhes sobre anchor e path_names.

  Esta função é mais ou menos equivalente a:

      for resource in files(anchor).joinpath(*path_names).iterdir():
          yield resource.name

  Descontinuado desde a versão 3.11: Prefira `iterdir()` como acima, que oferece mais controle sobre os resultados e funcionalidade mais rica.