Is PyPI Down? How to Check and Keep Your CI Green
Your CI just went red and you suspect PyPI. Here is how to confirm an outage in seconds - and how to stop a index blip from failing your builds in the first place.
When PyPI has a hiccup, every pipeline that pulls from it can fail at once. The good news: these failures are transient, so the fix is to confirm the outage and make your CI resilient to it.
How to check if PyPI is down
- Check the official status page: status.python.org
- Look for an active incident affecting the package index or file downloads.
- Cross-check community reports (Downdetector, the project's status on social/X).
- Confirm it is org-wide, not just your job: if every repo pulling from PyPI fails at once, it is an outage, not your config.
What it looks like in CI
An outage usually surfaces as a transient network or 5xx error while fetching from PyPI:
Typical CI log
WARNING: Retrying ... after connection broken by 'NewConnectionError'
ERROR: Could not install packages due to an OSErrorOutage vs your own bug
- Outage: many repos fail at once, errors are network/5xx/timeouts, no recent change on your side.
- Your bug: one repo, a specific error, started right after a change you made.
How to keep CI green during a blip
- Add retry-with-backoff around the step that hits PyPI - most blips pass within a minute.
- Use a PyPI mirror/proxy or a devpi cache so installs survive an upstream blip.
- Cache dependencies so a brief outage does not block jobs that could install from cache.
- Avoid mass "re-run all" during an incident - it piles up when the service recovers.
Key takeaways
- Check status.python.org first; org-wide failures = outage, not your config.
- PyPI blips are transient network/5xx errors.
- Retries, caching, and a mirror keep CI green through a hiccup.
Frequently asked questions
Why does a PyPI outage fail my whole pipeline?
Most CI steps fetch from PyPI with a single attempt and no retry, so one failed request fails the job. Adding retries or self-healing runners turns a momentary blip into a non-event.
Related guides
Self-Healing CI: Auto-Retrying Transient Registry and 5xx FailuresRegistry timeouts, 429s, and 5xx errors are transient by definition. See why they happen and how self-healing…
Self-Healing CI: Handling Network Timeouts and Flaky ConnectionsNetwork timeouts during dependency downloads and API calls are transient. Learn the manual mitigations and ho…
How to Retry a Failed Step or Job in GitHub ActionsHow to retry failed GitHub Actions steps and jobs - manual re-runs, retry actions with backoff, and automatic…
GitHub Actions Cost Calculator - Estimate & Cut Your CI BillFree GitHub Actions cost calculator: enter your monthly CI minutes and runner size to see your current bill a…