Python End of Life & Support Options —
What To Do When Python Patches Stop, Every Version's Date
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.
Key Dates at a Glance
- Python 3.9: end of life 2025-10-31
- Python 3.10: end of life 2026-10-31
- Python 3.11: end of life 2027-10-31
- Python 3.12: end of life 2028-10-31
- Python 3.13: bugfix support ends 2026-10-01; end of life 2029-10-31
- Python 3.14: bugfix support ends 2027-10-01; end of life 2030-10-31
- Python 3.8: end of life 2024-10-07
- Complete Python EOL schedule — all versions
- Every Python version, one line each
- Python 3.8 — end of life October 2024
- Python 3.9 — end of life October 2025
- Python 3.10 — end of life October 2026
- Python 3.11 — end of life October 2027
- Python 3.12 — supported until 2028
- Python 3.13 and 3.14 — the newest releases
- What the EOL Risk Score means
- How to migrate safely
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 |
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.
- Python 3.14 — released October 7, 2025; bugfix releases end October 1, 2027; end of life October 31, 2030.
- Python 3.13 — released October 7, 2024; bugfix releases end October 1, 2026; end of life October 31, 2029.
- Python 3.12 — released October 2, 2023; bugfix releases end April 2, 2025; end of life October 31, 2028.
- Python 3.11 — released October 24, 2022; bugfix releases end April 1, 2024; end of life October 31, 2027.
- Python 3.10 — released October 4, 2021; bugfix releases end April 5, 2023; end of life October 31, 2026.
- Python 3.9 — released October 5, 2020; bugfix releases end May 17, 2022; end of life October 31, 2025.
- Python 3.8 — released October 14, 2019; bugfix releases end May 3, 2021; end of life October 7, 2024.
- Python 3.7 — released June 27, 2018; bugfix releases end June 27, 2020; end of life June 27, 2023.
- Python 3.6 — released December 23, 2016; bugfix releases end December 24, 2018; end of life December 23, 2021.
- Python 3.5 — released September 13, 2015; end of life September 30, 2020.
- Python 3.4 — released March 16, 2014; end of life March 18, 2019.
- Python 3.3 — released September 29, 2012; end of life September 29, 2017.
- Python 3.2 — released February 20, 2011; end of life February 20, 2016.
- Python 3.1 — released June 27, 2009; end of life April 9, 2012.
- Python 3.0 — released December 3, 2008; end of life June 27, 2009.
- Python 2.7 — released July 3, 2010; end of life January 1, 2020.
- Python 2.6 — released October 1, 2008; end of life October 29, 2013.
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.
Migrating from Python 3.8
- Target Python 3.12 or later — 3.12 is supported until 2028, and the current stable release is 3.14
- Run
python -m py_compileon your codebase against 3.12 to catch syntax issues early - Check
distutilsusage — it was deprecated in 3.10 and removed in 3.12 - Replace
asyncio.get_event_loop()withasyncio.get_running_loop() - Use
pyupgrade --py312-plusto automatically modernize syntax
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.
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.
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.
Start your Python 3.11 migration now
- Run
pip install -r requirements.txtagainst Python 3.12 in a fresh venv — most failures surface immediately - Check
setuptoolsandpkg_resourcesusage — both are deprecated in newer pip tomllibis now in stdlib — remove thetomlibackport dependency- Exception groups (
ExceptionGroup) are available in 3.11+ and 3.12 — no migration needed - Run your full test suite on 3.12 in CI before touching production
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.
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:
- EOL Recency (40pts) — Python 2.7, six years past EOL, scores 98. Python 3.11, still supported, scores 44.
- Attack Surface (30pts) — Python runs web servers, processes data, executes arbitrary code. CVEs in EOL versions are never patched.
- CISA KEV Exposure (20pts) — whether known exploited vulnerabilities exist for this version in the CISA catalog.
- Extended Support Availability (10pts) — commercial extended support options for Python are limited, which increases urgency.
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.