diff --git a/setup.py b/setup.py index 44da14d094d..c0a9c2b0da7 100644 --- a/setup.py +++ b/setup.py @@ -29,8 +29,8 @@ 'alabaster>=0.7,<0.8', 'imagesize', 'requests>=2.5.0', - 'setuptools', 'packaging', + "importlib-metadata>=4.4; python_version < '3.10'", ] extras_require = { @@ -47,7 +47,6 @@ 'mypy>=0.930', 'docutils-stubs', "types-typed-ast", - "types-pkg_resources", "types-requests", ], 'test': [ diff --git a/sphinx/registry.py b/sphinx/registry.py index 543e5802bb2..3d70f8d9f02 100644 --- a/sphinx/registry.py +++ b/sphinx/registry.py @@ -21,7 +21,11 @@ from docutils.parsers import Parser from docutils.parsers.rst import Directive from docutils.transforms import Transform -from pkg_resources import iter_entry_points + +try: # Python < 3.10 (backport) + from importlib_metadata import entry_points +except ImportError: + from importlib.metadata import entry_points from sphinx.builders import Builder from sphinx.config import Config @@ -143,14 +147,14 @@ def preload_builder(self, app: "Sphinx", name: str) -> None: return if name not in self.builders: - entry_points = iter_entry_points('sphinx.builders', name) + builder_entry_points = entry_points(group='sphinx.builders') try: - entry_point = next(entry_points) - except StopIteration as exc: + entry_point = builder_entry_points[name] + except KeyError as exc: raise SphinxError(__('Builder name %s not registered or available' ' through entry point') % name) from exc - self.load_extension(app, entry_point.module_name) + self.load_extension(app, entry_point.module) def create_builder(self, app: "Sphinx", name: str) -> Builder: if name not in self.builders: diff --git a/sphinx/theming.py b/sphinx/theming.py index f5004022d5e..7a002201a0c 100644 --- a/sphinx/theming.py +++ b/sphinx/theming.py @@ -16,7 +16,10 @@ from typing import TYPE_CHECKING, Any, Dict, List from zipfile import ZipFile -import pkg_resources +try: # Python < 3.10 (backport) + from importlib_metadata import entry_points +except ImportError: + from importlib.metadata import entry_points from sphinx import package_dir from sphinx.errors import ThemeError @@ -201,12 +204,12 @@ def load_external_theme(self, name: str) -> None: Sphinx refers to ``sphinx_themes`` entry_points. """ # look up for new styled entry_points at first - entry_points = pkg_resources.iter_entry_points('sphinx.html_themes', name) + theme_entry_points = entry_points(group='sphinx.html_themes') try: - entry_point = next(entry_points) - self.app.registry.load_extension(self.app, entry_point.module_name) + entry_point = theme_entry_points[name] + self.app.registry.load_extension(self.app, entry_point.module) return - except StopIteration: + except KeyError: pass def find_themes(self, theme_path: str) -> Dict[str, str]: