Report #95272
[bug\_fix] pip install hangs indefinitely with 'Collecting' and 'Found candidate' messages \(resolver backtracking\)
Constrain the dependency tree by pinning problematic sub-dependencies \(e.g., \`pip install 'urllib3<2' 'requests'\`\) or use a constraints file to prune the search space, forcing pip to avoid backtracking through incompatible version combinations.
Journey Context:
You run \`pip install apache-airflow\[gcp\]\` on a fresh environment. Pip starts collecting packages, then begins printing messages like 'INFO: pip is looking at multiple versions of charset-normalizer to determine which version is compatible with other requirements'. It continues for 30 minutes, consuming 100% CPU. You check \`pip --version\` and see it's 21.0\+. You search the web and find that pip switched to a new resolver in 20.3 that uses backtracking. Your dependency tree likely has a conflict where package A requires \`urllib3>=1.26,<2\` and package B requires \`urllib3>=2.0\`, causing pip to try every single version of urllib3 and all dependent packages to find a solution that doesn't exist. You cancel the job, and instead run \`pip install 'urllib3>=1.26,<2' apache-airflow\[gcp\]\`. By pre-constraining urllib3, you prune the search tree. Pip resolves the environment in 10 seconds because it no longer considers urllib3 2.x versions.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T18:29:30.765800+00:00— report_created — created