Skip to content

pkg_resources (do setuptools) está deprecado #1106

@robertatakenaka

Description

@robertatakenaka

O pkg_resources (do setuptools) está deprecado e será removido em versões futuras. A migração recomendada é para importlib.metadata (disponível nativamente desde Python 3.8) ou importlib.resources.

Substituições principais

1. Obter versão de um pacote

# Antes
from pkg_resources import get_distribution
version = get_distribution("meu-pacote").version

# Depois
from importlib.metadata import version
version = version("meu-pacote")

2. Listar entry points

# Antes
from pkg_resources import iter_entry_points
for ep in iter_entry_points("console_scripts"):
    print(ep.name, ep.load())

# Depois
from importlib.metadata import entry_points

# Python 3.10+
eps = entry_points(group="console_scripts")

# Python 3.9 (retorna dict)
eps = entry_points().get("console_scripts", [])

for ep in eps:
    print(ep.name, ep.load())

3. Acessar arquivos de dados do pacote

# Antes
from pkg_resources import resource_filename, resource_string
path = resource_filename("meu_pacote", "data/arquivo.json")
content = resource_string("meu_pacote", "data/arquivo.json")

# Depois
from importlib.resources import files, as_file

# Obter conteúdo
content = files("meu_pacote").joinpath("data/arquivo.json").read_text()

# Obter path (quando precisa de arquivo real no filesystem)
with as_file(files("meu_pacote").joinpath("data/arquivo.json")) as path:
    # usar path aqui
    pass

4. Verificar se pacote está instalado

# Antes
from pkg_resources import DistributionNotFound, get_distribution
try:
    get_distribution("meu-pacote")
except DistributionNotFound:
    print("não instalado")

# Depois
from importlib.metadata import PackageNotFoundError, version
try:
    version("meu-pacote")
except PackageNotFoundError:
    print("não instalado")

5. Obter metadados do pacote

# Antes
from pkg_resources import get_distribution
dist = get_distribution("requests")
print(dist.project_name, dist.location)

# Depois
from importlib.metadata import metadata, distribution
meta = metadata("requests")
print(meta["Name"], meta["Author"])

dist = distribution("requests")
print(dist.locate_file(""))  # localização

Compatibilidade com Python < 3.8

Se precisar suportar versões antigas, use o backport:

pip install importlib-metadata
try:
    from importlib.metadata import version
except ImportError:
    from importlib_metadata import version

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions