Skip to content

Documentation: build failure with Sphinx 7.2.2 #2240

@jayaddison

Description

@jayaddison

The documentation for pip-tools fails to build using the currently-specified version 7.2.2 of Sphinx.

This appears to be due to an issue that has been resolved from version 7.2.3 of Sphinx: sphinx-doc/sphinx#11625

Environment Versions

  1. OS: Debian Linux (forky / testing)
  2. Python version: Python 3.13.7
  3. pip version: pip 25.1
  4. pip-tools version: pip-compile, version 7.5.1.dev28+dirty

Steps to replicate

  1. Set the working directory to the docs dir.
  2. pip install -r requirements.txt
  3. pip install -e .. # ensure pip-tools itself is installed as a package
  4. sphinx-build -b html . _build

Expected result

A complete successful HTML documentation build, with output in the _build directory.

Actual result

The build fails with the following traceback:

Traceback (most recent call last):
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/cmd/build.py", line 298, in build_main
    app.build(args.force_all, args.filenames)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/application.py", line 355, in build
    self.builder.build_update()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/builders/__init__.py", line 293, in build_update
    self.build(to_build,
    ~~~~~~~~~~^^^^^^^^^^
               summary=__('targets for %d source files that are out of date') %
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
               len(to_build))
               ^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/builders/__init__.py", line 313, in build
    updated_docnames = set(self.read())
                           ~~~~~~~~~^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/builders/__init__.py", line 420, in read
    self._read_serial(docnames)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/builders/__init__.py", line 441, in _read_serial
    self.read_doc(docname)
    ~~~~~~~~~~~~~^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/builders/__init__.py", line 498, in read_doc
    publisher.publish()
    ~~~~~~~~~~~~~~~~~^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/core.py", line 234, in publish
    self.document = self.reader.read(self.source, self.parser,
                    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
                                     self.settings)
                                     ^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/io.py", line 105, in read
    self.parse()
    ~~~~~~~~~~^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/readers/__init__.py", line 76, in parse
    self.parser.parse(self.input, document)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/parsers.py", line 81, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 169, in run
    results = StateMachineWS.run(self, input_lines, input_offset,
                                 input_source=document['source'])
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/statemachine.py", line 233, in run
    context, next_state, result = self.check_line(
                                  ~~~~~~~~~~~~~~~^
        context, state, transitions)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/statemachine.py", line 445, in check_line
    return method(match, context, next_state)
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 2357, in explicit_markup
    self.explicit_list(blank_finish)
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 2382, in explicit_list
    newline_offset, blank_finish = self.nested_list_parse(
                                   ~~~~~~~~~~~~~~~~~~~~~~^
          self.state_machine.input_lines[offset:],
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
          blank_finish=blank_finish,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^
          match_titles=self.state_machine.match_titles)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 316, in nested_list_parse
    state_machine.run(block, input_offset, memo=self.memo,
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                      node=node, match_titles=match_titles)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/statemachine.py", line 233, in run
    context, next_state, result = self.check_line(
                                  ~~~~~~~~~~~~~~~^
        context, state, transitions)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/statemachine.py", line 445, in check_line
    return method(match, context, next_state)
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 2660, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
                             ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 2367, in explicit_construct
    return method(self, expmatch)
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 2104, in directive
    return self.run_directive(
           ~~~~~~~~~~~~~~~~~~^
        directive_class, match, type_name, option_presets)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/docutils/parsers/rst/states.py", line 2154, in run_directive
    result = directive_instance.run()
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/ext/autodoc/directive.py", line 139, in run
    documenter.generate(more_content=self.content)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/ext/autodoc/__init__.py", line 1886, in generate
    return super().generate(more_content=more_content,
           ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
                            check_module=check_module,
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^
                            all_members=all_members)
                            ^^^^^^^^^^^^^^^^^^^^^^^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/ext/autodoc/__init__.py", line 869, in generate
    if not self.parse_name():
           ~~~~~~~~~~~~~~~^^
  File "<base-dir>/pip-tools/docs/.venv/lib/python3.13/site-packages/sphinx/ext/autodoc/__init__.py", line 388, in parse_name
    assert matched is not None
           ^^^^^^^^^^^^^^^^^^^
AssertionError

Edit: correction: update hyperlink to point to the relevant Sphinx issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions