Skip to content

sphinx~=7.3.0 breaks sphinx-immaterial #12295

@JacobChesslo

Description

@JacobChesslo

Describe the bug

sphinx~=7.3.0 seems to break the sphinx-immaterial theme, whereas sphinx~=7.2.0 works fine with this theme

How to Reproduce

I'm using docker/compose to minimize the environment for testability (it's reproducible elsewhere, but wanting to keep this simple)


Files

docker-compose.yml:

services:
  docs:
    build:
      context: ./
      dockerfile: Dockerfile

Dockerfile:

FROM python:3.12
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
WORKDIR /docs
COPY ./requirements.txt /docs/requirements.txt
COPY ./src /docs/src
RUN pip install -r requirements.txt && pip freeze && sphinx-build -E -W --keep-going -q -n -T src _build/linkcheck
# Running with minimum flags `sphinx-build src _build` or `sphinx-build src -b linkcheck src _build/linkcheck` also breaks

requirements.txt:

sphinx~=7.3.0  # using ~=7.2.0 instead does not have this issue
sphinx-immaterial~=0.11

src/conf.py

root_doc = "index"
extensions = ["sphinx_immaterial"]
html_theme = "sphinx_immaterial"

src/index.rst

Some Example Docs
=================

Hello World

Steps

  1. Running docker compose build results in the following pip freeze and traceback in the build logs:
alabaster==0.7.16
annotated-types==0.6.0
appdirs==1.4.4
Babel==2.14.0
certifi==2024.2.2
charset-normalizer==3.3.2
docutils==0.21.1
idna==3.7
imagesize==1.4.1
Jinja2==3.1.3
MarkupSafe==2.1.5
packaging==24.0
pydantic==2.7.0
pydantic-extra-types==2.6.0
pydantic_core==2.18.1
Pygments==2.17.2
requests==2.31.0
setuptools==69.2.0
snowballstemmer==2.2.0
Sphinx==7.3.4
sphinx_immaterial==0.11.11
sphinxcontrib-applehelp==1.0.8
sphinxcontrib-devhelp==1.0.6
sphinxcontrib-htmlhelp==2.0.5
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.7
sphinxcontrib-serializinghtml==1.1.10
typing_extensions==4.11.0
urllib3==2.2.1
wheel==0.43.0
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/sphinx/registry.py", line 453, in load_extension
    mod = import_module(extname)
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/usr/local/lib/python3.12/site-packages/sphinx_immaterial/apidoc/python/default.py", line 7, in <module>
    from . import parameter_objects
  File "/usr/local/lib/python3.12/site-packages/sphinx_immaterial/apidoc/python/parameter_objects.py", line 4, in <module>
    from sphinx.domains.python import PyTypedField
ImportError: cannot import name 'PyTypedField' from 'sphinx.domains.python' (/usr/local/lib/python3.12/site-packages/sphinx/domains/python/__init__.py)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/sphinx/cmd/build.py", line 332, in build_main
    app = Sphinx(args.sourcedir, args.confdir, args.outputdir,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sphinx/application.py", line 229, in __init__
    self.setup_extension(extension)
  File "/usr/local/lib/python3.12/site-packages/sphinx/application.py", line 402, in setup_extension
    self.registry.load_extension(self, extname)
  File "/usr/local/lib/python3.12/site-packages/sphinx/registry.py", line 466, in load_extension
    metadata = setup(app)
               ^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sphinx_immaterial/__init__.py", line 299, in setup
    app.setup_extension("sphinx_immaterial.apidoc.python.default")
  File "/usr/local/lib/python3.12/site-packages/sphinx/application.py", line 402, in setup_extension
    self.registry.load_extension(self, extname)
  File "/usr/local/lib/python3.12/site-packages/sphinx/registry.py", line 456, in load_extension
    raise ExtensionError(__('Could not import extension %s') % extname,
sphinx.errors.ExtensionError: Could not import extension sphinx_immaterial.apidoc.python.default (exception: cannot import name 'PyTypedField' from 'sphinx.domains.python' (/usr/local/lib/python3.12/site-packages/sphinx/domains/python/__init__.py))

Extension error:
Could not import extension sphinx_immaterial.apidoc.python.default (exception: cannot import name 'PyTypedField' from 'sphinx.domains.python' (/usr/local/lib/python3.12/site-packages/sphinx/domains/python/__init__.py))

Environment Information

Platform:              linux; (Linux-4.18.0-536.el8.x86_64-x86_64-with-glibc2.36)
Python version:        3.12.3 (main, Apr 10 2024, 14:35:18) [GCC 12.2.0])
Python implementation: CPython
Sphinx version:        7.3.4
Docutils version:      0.21.1
Jinja2 version:        3.1.3
Pygments version:      2.17.2

Sphinx extensions

["sphinx_immaterial"]

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions