Notice: This page displays a fallback because interactive scripts did not run. Possible causes include disabled JavaScript or failure to load scripts or stylesheets.

Python 3.9.12

Warning: Python 3.9.12 reached end-of-life on 2025-10-31. It is no longer supported and does not receive security updates. We recommend upgrading to the latest Python release.
Note: Python 3.9.12 has been superseded by Python 3.9.25.

Release date: March 23, 2022

This is the twelfth maintenance release of Python 3.9

Note: The release you're looking at is Python 3.9.12, a bugfix release for the legacy 3.9 series. Python 3.11 is now the latest feature release series of Python 3. Get the latest release of 3.11.x here.

This is a special release which fixes a regression introduced by BPO 46968 which caused Python to no longer build on Red Hat Enterprise Linux 6. There are only 12 other bugfixes on top of 3.9.11 in this release.

Major new features of the 3.9 series, compared to 3.8

Some of the new major new features and changes in Python 3.9 are:

  • PEP 573, Module State Access from C Extension Methods
  • PEP 584, Union Operators in dict
  • PEP 585, Type Hinting Generics In Standard Collections
  • PEP 593, Flexible function and variable annotations
  • PEP 602, Python adopts a stable annual release cadence
  • PEP 614, Relaxing Grammar Restrictions On Decorators
  • PEP 615, Support for the IANA Time Zone Database in the Standard Library
  • PEP 616, String methods to remove prefixes and suffixes
  • PEP 617, New PEG parser for CPython
  • BPO 38379, garbage collection does not block on resurrected objects;
  • BPO 38692, os.pidfd_open added that allows process management without races and signals;
  • BPO 39926, Unicode support updated to version 13.0.0;
  • BPO 1635741, when Python is initialized multiple times in the same process, it does not leak memory anymore;
  • A number of Python builtins (range, tuple, set, frozenset, list, dict) are now sped up using PEP 590 vectorcall;
  • A number of Python modules (_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref) now use multiphase initialization as defined by PEP 489;
  • A number of standard library modules (audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib) are now using the stable ABI defined by PEP 384.

You can find a more comprehensive list in this release's "What's New" document.

More resources

And Now for Something Completely Different

Number 3... THE LARCH.

Full Changelog

Files

Version Operating system Description File size GPG MD5 checksum
Gzipped source tarball Source release 25.1 MB SIG abc7f7f83ea8614800b73c45cf3262d3
XZ compressed source tarball Source release 18.8 MB SIG 4b5fda03e3fbfceca833c997d501bcca
macOS 64-bit Intel-only installer macOS for macOS 10.9 and later, deprecated 29.5 MB SIG d9a46473d41474b05b02ab4d42d6e2f1
macOS 64-bit universal2 installer macOS for macOS 10.9 and later 37.0 MB SIG e0144bd213485290adc05b57e09436eb
Windows installer (64-bit) Windows Recommended 27.8 MB SIG cc816f1323d591087b70df5fc977feae
Windows installer (32-bit) Windows 26.7 MB SIG 1e8477792ec093c02991bd37b8615a2e
Windows help file Windows 8.5 MB SIG a7cd250b2b561049e2e814c1668cb44d
Windows embeddable package (64-bit) Windows 8.1 MB SIG 5b16e3ca71cc29ab71a6e4b92a2f3f13
Windows embeddable package (32-bit) Windows 7.3 MB SIG 94955cca54dd7d21bedc4d10ab9d2d81