An interpreter change has three parts
Moving a Python application to a newer interpreter changes what the standard library contains, which prebuilt packages your dependencies can install, and which of your dependencies still support you at all. A version string in a Dockerfile is the smallest part of that.
- Standard-library removals: your own code and your dependencies may import modules that no longer exist.
- Compiled packages: they are published for particular interpreter versions, so a new interpreter may need newer releases.
- Support: a dependency may have dropped the old interpreter or not yet added the new one.
What the Python project says today
The Python developer guide, checked on 11 October 2026, shows 3.9 as end of life since 31 October 2025 and 3.10 since 1 October 2026. Python 3.11 and later receive security fixes, 3.13 is scheduled for them until October 2029, and 3.14 is in bugfix status. The guide marks scheduled dates and says they may change. If you are on 3.9 or 3.10, you may stop at 3.11 or 3.12 as an interim step, but that buys less time than a later target.
- Re-check the page before you act; its dates are the project's to change.
- Ask your host or base-image provider for its own cut-off date.
What 3.12 and 3.13 take away
From 3.9 or 3.10 to 3.13, two sets of removals apply. Python 3.12 removed distutils, imp, asyncore, asynchat and smtpd, and stopped installing setuptools in new virtual environments. Python 3.13 removed the 19 modules of PEP 594, including cgi, crypt, pipes and telnetlib, and lib2to3. Code that imports any of them fails on import, not at startup of the interpreter, so a test run that never reaches that file passes.
- Search your own code and dependencies for the removed module names.
- Import every module of the application once on the new interpreter.
- A framework major version is a separate job; Django 1.11 on Python 2.7 has its own job.
Which job fits
An application on Python 3.9 or 3.10 with pinned dependencies and a runnable test command matches the fixed Python 3.13 job. Python 2 code needs a different assessment, and an app behind in several places benefits from an inventory first. Send the interpreter version, how packages are installed and which packages compile. Do not send environment files or customer data. Prices are untested proposals and payment follows the agreed checks.
Sources and limits
- Python developer guide: versions Checked 2026-10-11.
- Python 3.9 reached end of life on 2025-10-31 and 3.10 on 2026-10-01.
- Python 3.11 and later receive security fixes; 3.13 is scheduled for security fixes until October 2029; 3.14 is in bugfix status; dates in italics are scheduled and may change.
- What's new in Python 3.12 Checked 2026-10-11.
- Python 3.12 removed distutils, imp, asyncore, asynchat and smtpd, and no longer installs setuptools in new virtual environments.
- What's new in Python 3.13 Checked 2026-10-11.
- Python 3.13 removed 19 modules listed in PEP 594, including cgi, crypt, pipes and telnetlib, and removed lib2to3.