Python 3.9 reached its end-of-life phase on 2025-10-31 ([PEP 596](https://peps.python.org/pep-0596/#lifespan)). ## How to remove support ### February 2026 * [x] Update the version in `README.md`. * [x] Update various fields in `pyproject.toml`. (#15402) * [x] Remove 3.9 from CI and test scripts. * [x] Update stubtest allow lists. Also check whether items can be moved to the common allow lists. (#15403) * [x] Remove `requires_python >= 3.10` and `python_version >= 3.10` from `METADATA.toml` ### May 2026 * [x] Remove 3.9 exclusive branches from stubs. (#15707, #15708) * [ ] Re-enable ruff codes `UP035`, `UP036` in `pyproject.toml`. * [ ] Remove `RUF100` code from `# noqa` directives. * [x] Revisit #15399. * [x] Remove obsolete stdlib modules (see `VERSIONS`). (#15710) * `_bootlocale` * `distutils.command.bdist_wininst` * `formatter` * `parser` * `symbol` * [x] Replace `typing_extensions` imports. (#15711) * `ParamSpec` * `TypeAlias` * `TypeGuard` * [ ] Remove `builtins.ellipsis` after type checkers have switched to `types.EllipsisType`. (#15712, see also #7580) * [x] Remove `_reader`/`_writer` workarounds in `stdlib/_csv.pyi`. (Part of #15708) #15712 (Please amend as necessary.)
Python 3.9 reached its end-of-life phase on 2025-10-31 (PEP 596).
How to remove support
February 2026
README.md.pyproject.toml. (Update project.requires-python to >=3.10 #15402)requires_python >= 3.10andpython_version >= 3.10fromMETADATA.tomlMay 2026
UP035,UP036inpyproject.toml.RUF100code from# noqadirectives.VERSIONS). (Remove modules dropped in Python 3.10 #15710)_bootlocaledistutils.command.bdist_wininstformatterparsersymboltyping_extensionsimports. (Import some items from typing instead of typing_extensions #15711)ParamSpecTypeAliasTypeGuardbuiltins.ellipsisafter type checkers have switched totypes.EllipsisType. (Removebuiltins.ellipsispseudo-type #15712, see also Remove type checker-specific symbols from builtins.pyi and typing.pyi #7580)_reader/_writerworkarounds instdlib/_csv.pyi. (Part of Drop 3.9 support in the stdlib #15708)Remove
builtins.ellipsispseudo-type #15712(Please amend as necessary.)