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
O
pkg_resources(dosetuptools) está deprecado e será removido em versões futuras. A migração recomendada é paraimportlib.metadata(disponível nativamente desde Python 3.8) ouimportlib.resources.Substituições principais
1. Obter versão de um pacote
2. Listar entry points
3. Acessar arquivos de dados do pacote
4. Verificar se pacote está instalado
5. Obter metadados do pacote
Compatibilidade com Python < 3.8
Se precisar suportar versões antigas, use o backport: