Skip to content
Latchkey

uv "No solution found when resolving dependencies" in CI

uv’s resolver could not find a set of versions satisfying every requirement, much like pip’s ResolutionImpossible or Poetry’s solver error. It prints the conflicting constraints or the unsatisfiable Python requirement.

What this error means

uv pip install/uv lock/uv sync fails with × No solution found when resolving dependencies, followed by a "because ... and ..." explanation of the conflict. It is deterministic and reproduces from the same inputs.

uv output
× No solution found when resolving dependencies:
  ╰─▶ Because only flask<2.1 is available and your project depends on
      flask>=3, we can conclude that your requirements are unsatisfiable.

Common causes

Conflicting version constraints

Two requirements demand non-overlapping versions of a shared package, so no single resolution exists - uv reports the contradiction.

requires-python excludes a needed release

Your requires-python (or --python target) does not overlap a dependency’s supported Python, leaving the resolver no candidate.

How to fix it

Read the "because" chain and relax a constraint

  1. The explanation names the two conflicting constraints - loosen your own pin so the ranges overlap.
  2. Or upgrade the lagging dependency that caps the shared package.
  3. Re-run uv lock to confirm a solution exists.

Align the target Python version

Resolve against a Python every dependency supports.

Terminal
uv lock --python 3.11
# or set requires-python in pyproject.toml
# [project] requires-python = ">=3.10,<3.13"

Inspect the resolution verbosely

Terminal
uv pip install -r requirements.txt --verbose

How to prevent it

  • Pin with ranges, not hard ==, unless required.
  • Keep requires-python aligned with your dependencies’ support.
  • Commit the uv.lock so resolution runs once, not per CI job.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →