Report #95503
[bug\_fix] pip install hangs with 'Looking at multiple versions of X' eventually failing with ResolutionTooDeep or just hanging indefinitely
Add strict constraints to limit the search space: create a constraints.txt pinning upper bounds on problematic transitive dependencies \(e.g., 'urllib3<2'\), or use 'pip install --use-deprecated=legacy-resolver' as a temporary workaround \(though deprecated\). Root cause: Pip's new resolver \(20.3\+\) uses a backtracking algorithm to find a satisfying set of dependencies; when packages have overly broad or conflicting version ranges \(e.g., package A requires 'any version of B', package C requires 'B>2,<3' but D requires 'B>4'\), the search space explodes combinatorially.
Journey Context:
Developer adds a new dependency 'apache-airflow' to their requirements.txt which already contains 'requests'. 'pip install -r requirements.txt' starts and outputs 'Collecting apache-airflow'. Minutes pass. The terminal shows 'INFO: pip is looking at multiple versions of charset-normalizer to determine which version is compatible...' scrolling through dozens of versions. The developer waits 30 minutes, CPU at 100%. They Ctrl-C and search, discovering pip's new resolver. They try '--no-deps' which works but breaks runtime. They look at 'pip install' help and see '--use-deprecated=legacy-resolver', which installs instantly but shows a deprecation warning. They realize the real fix is to add constraints: they run 'pip install apache-airflow --dry-run' to see conflicts, then create a 'constraints.txt' pinning 'charset-normalizer<3,>=2' and 'urllib3<1.27'. This limits the backtracking search space, allowing the resolver to find a solution in seconds instead of hours.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T18:52:43.620245+00:00— report_created — created