Tools: Update: Python End-of-Life Dates - Official EOL Schedule for Every Version
Complete Python EOL Schedule
Python 3.8 - End of Life October 31, 2024
Python 3.9 - End of Life October 31, 2025
Python 3.11 - End of Life October 31, 2026
Python 3.12 - Current Stable, Supported Until 2028
Python 3.13 - Latest Release
How to Migrate Safely - 5 Steps
EOL Risk Scores - What They Mean
Check Your Full Stack Python 3.8 reached end of life in October 2024. Python 3.9 followed in October 2025. Python 3.10 and 3.11 both hit EOL on October 31, 2026 - six months from now. And Python 2.7 has been dead since January 2020. It still runs in more production environments than anyone admits. This is the single reference for Python end-of-life dates across every major version - with EOL Risk Scores, migration notes, and plain-English guidance on what to do if you're running past end of support. Python 3.11 EOL is October 31, 2026 - approximately 6 months away. If your stack runs Python 3.11, start migration planning today. Migrations take longer than expected when dependencies are involved. Python releases a new minor version (3.x) roughly every October and supports each version for five years. ⚠️ Python 3.10 and 3.11 both reach EOL on October 31, 2026. Two major Python versions going end-of-life on the same date means a significant portion of the Python ecosystem will be unpatched simultaneously. Python 3.8 reached end of life on October 31, 2024. No security patches, no bug fixes, no CVE remediation. Python 3.8 became the default Python on Ubuntu 20.04 LTS - which means any server still running Ubuntu 20.04 is almost certainly running Python 3.8 as its system Python. The double EOL problem: Ubuntu 20.04 reached EOL in April 2025. Its system Python is 3.8, also EOL. Two compounding unpatched runtimes on the same server. Migration path to Python 3.12: → Python 3.8 EOL Risk Score Card Python 3.9 reached end of life on October 31, 2025. It introduced built-in generic types (list[int] instead of List[int]), the | merge operator for dicts, and became the default Python on Ubuntu 22.04 LTS. The Docker problem: 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 containers: If you see 3.9 or earlier, update your Dockerfiles to FROM python:3.12-slim and rebuild. → Python 3.9 EOL Risk Score Card Python 3.11 reaches end of life on October 31, 2026 - six months from now. It was the fastest Python release in years - benchmarks showed 10-60% performance improvements over Python 3.10. Many teams upgraded specifically for these gains and then stayed there. Six months sounds comfortable. It isn't - especially for larger codebases with complex dependency trees. The average Python migration takes 4-8 weeks when you factor in dependency compatibility testing, CI pipeline updates, and staged rollouts. Start now. Key steps: → Python 3.11 EOL Risk Score Card Python 3.12 is the recommended migration target. Supported until October 31, 2028 - a solid two-year runway from today. Key changes to be aware of: Check for removed module usage: → Python 3.12 EOL Risk Score Card Python 3.13 is the latest release, available since October 2024 and supported until October 31, 2029. It introduces an experimental free-threaded mode (PEP 703 - removing the GIL) and a new interactive REPL. For most production deployments, Python 3.12 is the right choice today. The free-threaded mode is experimental. Adopt 3.13 when your key dependencies have confirmed compatibility. Step 1 - Test the target version first
python3.12 -m venv venv-test then pip install -r requirements.txt. Every failure is a migration task. Step 2 - Check for removed modulesRun grep -r "import distutils\|from distutils" . across your codebase. distutils removal is the most common blocker. Step 3 - Use pyupgrade Automatically updates type hints, string formatting, and deprecated patterns. Step 4 - Update CI before productionChange your CI matrix to include Python 3.12. Clean CI run before any production change. Step 5 - Update Docker base images
FROM python:3.11 becomes FROM python:3.12-slim. Rebuild and test. Every Python version page on endoflife.ai carries an EOL Risk Score - a 0-100 score measuring actual security and operational risk. Four factors: 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. This article is part of The EOL Intelligence Report series on DEV.to. EOL dates sourced from endoflife.date, Python Software Foundation, and CISA KEV Catalog. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse