## TL;DR
uv's resolver cannot satisfy every constraint at once. Read the conflict report it prints, find the two requirements that disagree, then loosen or pin one side so a solution exists. Re-run the resolve to confirm.

## Error

```text
uv 'No solution found when resolving dependencies'  -  how to fix
```

## Steps

1. Reproduce with full output: uv pip install -r [requirements file] or uv sync, and read the conflict section.
   Expected output: uv names the incompatible requirements, for example package A needs lib 2 or newer while package B caps it below 2.
2. Identify which of your requirements impose each side; check the requirements file and any constraint files.
   Expected output: You know the exact lines that disagree.
3. Fix one side: upgrade the package with the older cap, loosen an exact pin, or drop a stale upper bound.
   Expected output: The constraints admit at least one common version.
4. Re-run the resolve: uv pip compile [requirements file] to inspect the locked set before installing.
   Expected output: uv prints a full resolved set with no conflict.
5. Install and test: uv pip install -r [requirements file], then run the suite.
   Expected output: The install succeeds and tests pass on the resolved versions.

## When to use

- uv fails with No solution found when resolving dependencies
- An upgrade or a new requirement made a previously fine set unresolvable
- You want to preview the resolved set with uv pip compile before installing

## When not to use

- uv fails downloading after resolving; that is network or cache, not resolution
- The error is about a missing interpreter or python version; fix the python pin first
- pip is the resolver in play; its conflict output reads differently

## Variant phrasings

### uv sync fails with no solution found
The project-workflow shape; the conflicting constraints live in pyproject.toml.

### uv pip compile reports conflicting requirements
The preview shape; compile surfaces the clash before anything is installed.

### No solution found after adding one new dependency
The new requirement's constraints collide with the existing set; check its version bounds.

## Why it happens

uv resolves the whole dependency graph up front and fails fast when no combination satisfies every constraint. The usual culprits are exact pins and upper bounds that were compatible until one package released a new version with tighter requirements of its own.

## Edge cases

- uv's resolver is stricter and faster than pip's; a set pip "solves" by backtracking for minutes may fail fast in uv, which is a feature.
- Overrides in uv can force a version past the resolver; use them sparingly and document why.
- Pre-release versions are excluded by default; if the fix needs one, opt in explicitly per package.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_9y6WAt0gre_mO1L3LWGHGQ
