From c434ce03f997b809ceb8a5041b33f59f44153281 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Wed, 5 Nov 2025 09:50:52 -0800 Subject: [PATCH] Switch from pkg_resources to importlib.metadata Refs #2057, refs 852f5014 --- datasette/app.py | 6 +++--- datasette/plugins.py | 19 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/datasette/app.py b/datasette/app.py index ae74c5d3..bda16e65 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -11,7 +11,7 @@ import inspect from itsdangerous import BadSignature import json import os -import pkg_resources +import importlib.metadata import re import secrets import sys @@ -921,9 +921,9 @@ class Datasette: if using_pysqlite3: for package in ("pysqlite3", "pysqlite3-binary"): try: - info["pysqlite3"] = pkg_resources.get_distribution(package).version + info["pysqlite3"] = importlib.metadata.version(package) break - except pkg_resources.DistributionNotFound: + except importlib.metadata.PackageNotFoundError: pass return info diff --git a/datasette/plugins.py b/datasette/plugins.py index fef0c8e9..bddaddf0 100644 --- a/datasette/plugins.py +++ b/datasette/plugins.py @@ -1,6 +1,7 @@ import importlib +import importlib.metadata +import importlib.resources import pluggy -import pkg_resources import sys from . import hookspecs @@ -40,16 +41,16 @@ def get_plugins(): templates_path = None if plugin.__name__ not in DEFAULT_PLUGINS: try: - if pkg_resources.resource_isdir(plugin.__name__, "static"): - static_path = pkg_resources.resource_filename( - plugin.__name__, "static" + if (importlib.resources.files(plugin.__name__) / "static").is_dir(): + static_path = str( + importlib.resources.files(plugin.__name__) / "static" ) - if pkg_resources.resource_isdir(plugin.__name__, "templates"): - templates_path = pkg_resources.resource_filename( - plugin.__name__, "templates" + if (importlib.resources.files(plugin.__name__) / "templates").is_dir(): + templates_path = str( + importlib.resources.files(plugin.__name__) / "templates" ) - except (KeyError, ImportError): - # Caused by --plugins_dir= plugins - KeyError/ImportError thrown in Py3.5 + except (TypeError, ModuleNotFoundError): + # Caused by --plugins_dir= plugins pass plugin_info = { "name": plugin.__name__,