Python Lifecycle Intelligence

Python End of Life & Support Options —
What To Do When Python Patches Stop, Every Version's Date

By Scott Bissett Updated September 5, 2026 · endoflife.ai · 8 min read

Python 3.8 reached end of life in October 2024. Python 3.9 followed in October 2025. Python 3.10 reaches its EOL date on October 31, 2026 — with Python 3.11 following a year later in October 2027. And Python 2.7 has been dead since January 2020, yet it still runs in more production environments than anyone admits.

This is the single authoritative reference for Python end-of-life dates across every major version — with EOL Risk Score™s™, migration notes, and plain-English guidance on what to do if you're running past end of support.

⚠ Upcoming EOL — Act Now
Python 3.10 reaches end of life on October 31, 2026. If your stack runs Python 3.10, start your migration planning today. Migrations take longer than expected when dependencies are involved. Python 3.11 follows on October 31, 2027.
Quick answer: Python 3.14 is supported until October 31, 2030, its end-of-support date. Active support for Python 3.14 ends on October 1, 2027; security fixes continue until that end-of-life date. The next Python version to reach end of life is 3.10, on October 31, 2026. 12 of 17 tracked Python versions are past end of life; the most recent to reach it, 3.9, did so on October 31, 2025. Every Python version's release and end-of-support date is on the Python lifecycle page.

Key Dates at a Glance

Complete Python EOL Schedule

Python releases a new minor version (3.x) roughly every October and supports each version for five years. The table below covers every Python 3.x version from 3.6 on, plus 2.7, with the date its bugfix releases end and its official end-of-life date as published by the Python developer guide.

Version Released Bugfix releases end End of Life Status EOL Risk Score™
Python 2.7 Jul 3, 2010 Jan 1, 2020 EOL 70
Python 3.6 Dec 23, 2016 Dec 24, 2018 Dec 23, 2021 EOL 70
Python 3.7 Jun 27, 2018 Jun 27, 2020 Jun 27, 2023 EOL 70
Python 3.8 Oct 14, 2019 May 3, 2021 Oct 7, 2024 EOL 65
Python 3.9 Oct 5, 2020 May 17, 2022 Oct 31, 2025 EOL 60
Python 3.10 Oct 4, 2021 Apr 5, 2023 Oct 31, 2026 Approaching 45
Python 3.11 Oct 24, 2022 Apr 1, 2024 Oct 31, 2027 Supported 30
Python 3.12 Oct 2, 2023 Apr 2, 2025 Oct 31, 2028 Supported 30
Python 3.13 Oct 7, 2024 Oct 1, 2026 Oct 31, 2029 Supported 30
Python 3.14 Oct 7, 2025 Oct 1, 2027 Oct 31, 2030 Supported 30
⚠ Next EOL — October 2026
Python 3.10 reaches end of life on October 31, 2026. Python 3.11 follows one year later, on October 31, 2027. If your stack runs Python 3.10, the migration window closes on October 31, 2026. The current stable release is Python 3.14 (released October 7, 2025, supported until October 31, 2030).

Every Python version, one line each

The same schedule as plain statements, one per minor version, for anyone who needs a single date rather than a table. Every date is bound to the same data as the Python product page, checked against the Python developer guide's version table, and re-verified at each build. Versions before Python 2.6 are not listed.

Running Python past end of life?
Extended support past the official EOL date exists for many products in this position — whether it covers Python is exactly what we check. Tell us where to reach you and we’ll reply with matched options and pricing guidance — or an honest “no vendor covers this.” Free, no obligation.

Free · No obligation · Independent — we track the dates, vendors don’t pay for placement · dates verified against vendor sources. See all support options →

Python 3.8 — End of Life October 7, 2024

Python 3.8 reached its official end-of-life date on October 7, 2024. It has been unsupported for well over a year. No security patches, no bug fixes, no CVE remediation.

Python 3.8 was the version that introduced the walrus operator (:=), positional-only parameters, and significant performance improvements to the dict implementation. It became the default Python on Ubuntu 20.04 LTS — which means any server still running Ubuntu 20.04 is very likely running Python 3.8 as its system Python.

Ubuntu 20.04 + Python 3.8 — double risk
Ubuntu 20.04 reached EOL in April 2025. Its system Python is 3.8, also EOL. If you're running Ubuntu 20.04, you likely have two compounding EOL risks on the same server. Check the Ubuntu 20.04 EOL Risk Score and Python 3.8 EOL Risk Score.
EOL Risk Score™
Python 3.8 · see the live score

Migrating from Python 3.8

Python 3.9 — End of Life October 31, 2025

Python 3.9 reached end of life on October 31, 2025. It introduced built-in generic types (list[int] instead of List[int] from typing), the | merge operator for dicts, and became the default Python on Ubuntu 22.04 LTS.

Python 3.9 had a long tail of adoption because Ubuntu 22.04 shipped it as the default. Many Docker base images still use python:3.9 as their foundation. If you're pulling from Docker Hub without pinning to a specific digest, you may be running 3.9 in containers without realising it.

EOL Risk Score™
Python 3.9 · see the live score

Check your Docker base images

Run docker inspect <image> | grep -i python on your production containers. If you see 3.9 or earlier, that's your migration target. Update your Dockerfiles to FROM python:3.12-slim and rebuild.

Python 3.10 — End of Life October 31, 2026

Python 3.10 reaches end of life on October 31, 2026. It introduced structural pattern matching (match/case), better error messages, and parenthesized context managers.

If you adopted Python 3.10 specifically for pattern matching, the good news is that Python 3.12 fully supports it with further improvements. The migration path from 3.10 to 3.12 is straightforward for most codebases.

EOL Risk Score™
Python 3.10 · EOL Oct 31, 2026 · see the live score

Python 3.11 — End of Life October 31, 2027

Python 3.11 reaches end of life on October 31, 2027. It was the fastest Python release in years — benchmarks showed 10–60% performance improvements over Python 3.10, driven by the Specializing Adaptive Interpreter. Many teams upgraded specifically for these gains.

The EOL date is about fifteen months away. That sounds comfortable. It isn't — especially for larger codebases with complex dependency trees. The average Python migration across a medium-sized application takes 4–8 weeks when you factor in dependency compatibility testing, CI pipeline updates, and staged rollouts.

EOL Risk Score™
Python 3.11 · EOL Oct 31, 2027 · see the live score

Start your Python 3.11 migration now

Python 3.12 — Supported Until October 2028

Python 3.12 is a widely deployed, conservative migration target for teams on 3.8, 3.9, 3.10, or 3.11. It is supported until October 31, 2028 — giving you a runway of just over two years from today. The current stable release is Python 3.14.

Python 3.12 brings further performance improvements, a new @override decorator for type checking, improved f-string parsing, and the removal of long-deprecated modules including distutils, aifc, cgi, and chunk. The removal of distutils is the most common migration blocker — check for it before upgrading.

EOL Risk Score™
Python 3.12 · Supported until Oct 2028 · see the live score

Python 3.13 and 3.14 — The Newest Releases

Python 3.13, available since October 2024, is supported until October 31, 2029. It introduces an experimental free-threaded mode (PEP 703 — removing the GIL), a new interactive interpreter (REPL), and continued performance work from the Faster CPython project. Python 3.14, released October 2025, is the current stable release and is supported until October 31, 2030.

For most production deployments, Python 3.12 or 3.13 are safe choices today. The free-threaded mode in 3.13+ is experimental and not recommended for production. Adopt 3.13 or 3.14 when your key dependencies have confirmed compatibility.

What the EOL Risk Score™ Means for Python

Every Python version page on endoflife.ai carries an EOL Risk Score™ — a 0–100 score measuring the actual security and operational risk of running that version in production. Four factors drive the score:

Score reference
Python 2.7 → 70 · Python 3.8 → 65 · Python 3.9 → 60 · Python 3.10 → 45 · Python 3.11 → 30 · Python 3.12 → 30 · Python 3.13 → 30 · Python 3.14 → 30 (live values, rewritten at every build)
What to do about it

Python currently carries an EOL Risk Score™ of 60/100 — Grade C, elevated risk, recalculated at every site build from EOL recency, attack surface, CISA KEV exposure, and extended-support availability. Per-version scores and dates are on the Python lifecycle page.

The right response comes down to one question: how many more years does this system need to run? Under a year, extended support (where it exists) is usually cheaper than an emergency migration. One to three years, migrate — support fees paid repeatedly cost more than doing the project once. Indefinitely, migrate now and plan the next one before it surprises you. Extended support is often the more expensive choice over a multi-year horizon — a bridge, not a destination. And if this deadline feels like vendor caprice, it isn’t — why end of life is inevitable for every version, with the receipts.

How to Migrate Safely

Step 1 — Test against the target version first

Create a fresh virtual environment with Python 3.12: python3.12 -m venv venv-test. Install your full requirements.txt. Note every failure — these are your migration tasks.

Step 2 — Check for removed modules

Python 3.12 removed distutils, aifc, cgi, cgitb, chunk, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu, and xdrlib. Run grep -r "import distutils\|from distutils" . to find usage in your codebase.

Step 3 — Use pyupgrade for automatic fixes

pip install pyupgrade then run pyupgrade --py312-plus **/*.py. It automatically updates old-style type hints, string formatting, and deprecated patterns. Safe to run on any codebase.

Step 4 — Update CI before production

Change your CI matrix to include Python 3.12. Run your full test suite. Fix failures. Only promote to production after a clean CI run. Use .python-version or pyproject.toml to pin the version explicitly.

Step 5 — Update your Docker base images

Change FROM python:3.11 to FROM python:3.12-slim in all Dockerfiles. Rebuild and test. The -slim variant reduces image size significantly and is appropriate for most production workloads.

Frequently Asked Questions

When does Python 3.10 reach end of life?

October 31, 2026. Python 3.10 was released October 4, 2021; bugfix releases ended April 5, 2023 and it has received source-only security fixes since. After October 31, 2026 the Python core team ships no further fixes for 3.10, including security fixes.

Is Python 3.9 still supported?

No. Python 3.9 reached end of life on October 31, 2025 (final release 3.9.25); Python 3.8 ended October 7, 2024. Neither receives security fixes. Third-party vendors sell extended security patches for 3.8 and 3.9 for teams that cannot upgrade yet.

How long is each Python version supported?

Five years from release under PEP 602's annual cadence: roughly two years of bugfix releases, then security-only fixes until end of life in October of the fifth year. Python 3.11 ends October 31, 2027; 3.12 October 31, 2028; 3.13 October 31, 2029; 3.14 October 31, 2030.

Which Python version should I upgrade to in 2026?

Python 3.12 or 3.13 for the best balance of library support and runway (to October 2028 and October 2029); Python 3.14, released October 7, 2025, has the longest runway (October 31, 2030) and is the right target for new projects once your dependencies publish wheels for it. Skip 3.11 for new deployments — it leaves in October 2027.

Is Python 2.7 still supported anywhere?

Not by the Python core team — 2.7 ended January 1, 2020 (final release 2.7.18 in April 2020). Some Linux distributions and third-party vendors ship extended security fixes for 2.7 packages, but any application still on 2.7 is running a runtime that has been unpatched upstream for over six years.

How do I check my Python version?

Run python3 --version (or python --version) on the host, or sys.version_info inside the interpreter. Check what your project pins in pyproject.toml (requires-python), .python-version, runtime.txt, tox/CI matrices and your Dockerfile's FROM python:… tag — the pinned version is often older than the host's.

What happens if I keep running Python 3.10 after October 31, 2026?

The interpreter keeps running, but every vulnerability fixed in 3.11+ stays open on 3.10 — including issues in bundled components such as the ssl, zipfile and http modules — and major libraries drop 3.10 wheels quickly, so your dependency upgrades become blocked too. Compliance frameworks treat an unsupported runtime as a control failure. Extended support from third-party vendors is a bridge; the upgrade is the destination.

When do Python 3.11 and 3.12 reach end of life?

Python 3.11 reaches end of life on October 31, 2027 and Python 3.12 on October 31, 2028. Both are already in the security-only phase: 3.11's bugfix releases ended April 1, 2024 and 3.12's ended April 2, 2025, so each receives source-only security fixes until its end-of-life date and nothing after it.

Is Python 3.8 still supported?

No. Python 3.8 reached end of life on October 7, 2024 and Python 3.7 on June 27, 2023. Neither receives security fixes from the Python core team. The supported versions are 3.10 (security only until October 31, 2026), 3.11, 3.12, 3.13 and 3.14.

When does Python 3.13 stop getting bugfix releases?

Python 3.13's bugfix releases end on October 1, 2026; from then until its end of life on October 31, 2029 it receives security fixes only, as source releases. Python 3.14's bugfix releases end on October 1, 2027 and its end of life is October 31, 2030.

Is there extended support for Python 3.8, 3.9 or 3.10 after end of life?

Not from the Python core team, whose support ends on the end-of-life date. Commercial vendors sell security patches for end-of-life Python versions, usually priced per year, as a bridge for applications that cannot move to a supported version in time; Linux distributions also backport fixes into their own Python packages on their own clocks, which covers the interpreter they ship and nothing else. Whether a bridge beats an upgrade depends on how long the application has left to run; the form on this page matches options.

Check your full stack
Python runtime EOL is one piece of the puzzle. Your pip packages, frameworks (Django, Flask, FastAPI), and OS runtime each have their own end-of-life dates. Use the free EOL Checker or Stack Scanner at endoflife.ai to audit your entire dependency tree — no account required.

The Monthly EOL Digest™

Once a month — critical end-of-life dates, CVE blind spots, and lifecycle changes worth knowing about.

✓ You're on the list.