Skip to content
Latchkey

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

  1. Check the official status page: status.python.org
  2. Look for an active incident affecting the package index or file downloads.
  3. Cross-check community reports (Downdetector, the project's status on social/X).
  4. 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 OSError

Outage 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

Run this faster and cheaper on Latchkey managed runners. Start free →