3.8 released 14 October 2019, latest 3.8.20.
Python 3.8 reached end of life on 7 October 2024.
What changed
Python 3.8 added assignment expressions using :=, positional-only function parameters marked with /, and f-string debugging syntax such as f"{value=}". It expanded the standard library with importlib.metadata for installed-package metadata, multiprocessing.shared_memory for sharing memory between processes, and improved pickle support for out-of-band buffers. Typing gained useful standard-library forms including TypedDict, Protocol, Literal and Final. CPython also introduced performance-oriented internal changes such as the vectorcall calling convention, alongside audit hooks that let applications and hosts observe selected security-relevant runtime events.
What staying costs
Python 3.8 has reached end of life, so upstream no longer provides fixes for security vulnerabilities, interpreter defects, or standard-library issues in this line. Continuing to run it leaves the application dependent on operating-system or distributor backports where available, which may not cover all affected components. Dependency maintainers increasingly drop older Python versions from test matrices and distribution builds, making upgrades, security remediation, and new environment provisioning harder. The operational risk is not only unpatched Python itself: an aging interpreter can force teams to retain older dependency versions, base images, build tooling, and native extensions.
What to do
Plan a move to a currently supported Python line, selecting the newest line that is compatible with the application, its deployment platform, and critical third-party packages. Inventory every runtime, worker, command-line tool, build environment, container image, and serverless configuration that still invokes Python 3.8. Create a clean environment on the target interpreter, resolve and upgrade dependencies, and confirm that packages with compiled extensions publish compatible wheels or can be rebuilt. Run the full test suite, integration tests, packaging checks, and production-like performance tests under the target version. Pay particular attention to deprecated APIs, changed dependency behavior, serialization boundaries, text and encoding handling, and any code that depends on implementation details. Roll out through a staged deployment with monitoring and a rollback plan, then remove Python 3.8 from supported build and deployment paths.
We can tell you what moving off Python 3.8 involves.
What it takes to move off Python 3.8 depends on what you built on it — the version you are on, how much depends on it, and how much of the work is mechanical. Leave your email with this version and we can tell you what that looks like for you.
Not sure yet? Get my plan
