-
Notifications
You must be signed in to change notification settings - Fork 24
Open
Description
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
pass4. 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çãoCompatibilidade 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 versionReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels