Skip to content

IndexError when upgrading to Python 3.11 with rlextra #2294

@daveisfera

Description

@daveisfera

I just tried upgrading from Python 3.9 because it's EOL and it runs into an exception when running pip-compile with rlextra on Python 3.11

Environment Versions

  1. Debian Trixie
  2. Python version: 3.11.14
  3. pip version: 24.0
  4. pip-tools version: 7.5.2

Steps to replicate

  1. Put rlextra in a requirements.in file using Python 3.9
  2. Build requirements.txt with pip-compile
  3. Upgrade to Python 3.11
  4. Run pip-compile
  5. Observe traceback

Expected result

Would work on Python 3.11 like 3.9

Actual result

IndexError happens when processing rlextra. I believe this is because the versions available in pypi don't cover 3.11 and the private repo is needed to get the actual package, but pip-compile assumes that something will be available in pypi and that causes the IndexError

Traceback (most recent call last):
  File "/usr/src/venv/bin/pip-compile", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/click/core.py", line 1485, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/click/core.py", line 1406, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/click/core.py", line 1269, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/click/core.py", line 824, in invoke
    return callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/click/decorators.py", line 34, in new_func
    return f(get_current_context(), *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/piptools/scripts/compile.py", line 482, in cli
    hashes = resolver.resolve_hashes(results) if generate_hashes else None
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/piptools/resolver.py", line 171, in resolve_hashes
    return {ireq: self.repository.get_hashes(ireq) for ireq in ireqs}
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/piptools/resolver.py", line 171, in <dictcomp>
    return {ireq: self.repository.get_hashes(ireq) for ireq in ireqs}
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/piptools/repositories/pypi.py", line 329, in get_hashes
    return self._get_req_hashes(ireq)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/piptools/repositories/pypi.py", line 336, in _get_req_hashes
    matching_candidates = self._get_matching_candidates(ireq)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/venv/lib/python3.11/site-packages/piptools/repositories/pypi.py", line 393, in _get_matching_candidates
    return candidates_by_version[matching_versions[0]]
                                 ~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is not workingneeds reproduceNeed to reproduce an issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions