Report #13987
[bug\_fix] pip dependency resolver backtracking indefinitely \("pip is looking at multiple versions of..."\)
Pin dependencies using a constraints file \(\`-c constraints.txt\`\) or upgrade pip/setuptools/wheel to latest versions before installing. The backtracking resolver exhausts combinations when dependency ranges are too loose or conflicting. Constraints pre-resolve the graph, eliminating the search space that causes exponential backtracking. Alternatively, use \`pip install --upgrade-strategy only-if-needed\` or narrow version specifiers in requirements.txt.
Journey Context:
Your CI pipeline that used to install in 30 seconds is now timing out after 10 minutes. The logs show \`INFO: pip is looking at multiple versions of charset-normalizer to determine which version is compatible with other requirements\` followed by hundreds of lines of \`Collecting package==X.Y.Z\`. You think it's a network issue and retry, but it hangs again. You try \`pip install --no-deps\` and it works fast, confirming it's the resolver. You check your \`requirements.txt\` and see you have \`requests>=2.0\` and \`botocore>=1.0\` with no upper bounds. You realize that pip's new resolver \(post-20.3\) is trying every combination of transitive dependencies to find a compatible set. You generate a constraints file with \`pip-compile\` or manually pin \`requests==2.28.1\` and \`charset-normalizer==2.1.1\`, then install with \`pip install -c constraints.txt -r requirements.txt\`. The install completes in 45 seconds because the constraints eliminate the backtracking search space.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T20:20:16.309669+00:00— report_created — created