# Python 3.12.0 (final) is here

**URL:** <https://discuss.python.org/t/python-3-12-0-final-is-here/35186>\
**Category:** Core Development\
**Tags:** release\
**Created:** [October 2, 2023, 3:34pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186 "2023-10-02T15:34:09Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![thomas](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/thomas/32/5492_2.png) [@thomas](https://discuss.python.org/u/thomas)\
**Post date:** [October 2, 2023, 3:34pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/1 "2023-10-02T15:34:09Z")

</div>

Finally, it’s final! The final release of Python 3.12.0 (final) is here!

(This also means I’ll be unblocking the 3.12 branch soon; I’m just going through pending PRs and merging them sequentially, to avoid some of the churn.)

> **[Python Release Python 3.12.0](https://www.python.org/downloads/release/python-3120/)**
>
> The official home of the Python Programming Language

## This is the stable release of Python 3.12.0

Python 3.12.0 is the newest major release of the Python programming language, and it contains many new features and optimizations.

# Major new features of the 3.12 series, compared to 3.11

## New features

- [More flexible f-string parsing](https://docs.python.org/3.12/whatsnew/3.12.html#pep-701-syntactic-formalization-of-f-strings), allowing many things previously disallowed ([PEP 701](https://peps.python.org/pep-0701/)).
- [Support for the buffer protocol](https://docs.python.org/3.12/whatsnew/3.12.html#pep-688-making-the-buffer-protocol-accessible-in-python) in Python code ([PEP 688](https://peps.python.org/pep-0688/)).
- [A new debugging/profiling API](https://docs.python.org/3.12/whatsnew/3.12.html#pep-669-low-impact-monitoring-for-cpython) ([PEP 669](https://peps.python.org/pep-0669/)).
- [Support for isolated subinterpreters](https://docs.python.org/3.12/whatsnew/3.12.html#pep-684-a-per-interpreter-gil) with separate Global Interpreter Locks ([PEP 684](https://peps.python.org/pep-0684)).
- [Even more improved error messages](https://docs.python.org/3.12/whatsnew/3.12.html#improved-error-messages). More exceptions potentially caused by typos now make suggestions to the user.
- [Support for the Linux `perf` profiler](https://docs.python.org/3.12/howto/perf_profiling.html) to report Python function names in traces.
- [Many large and small performance improvements](https://docs.python.org/3.12/whatsnew/3.12.html#optimizations) (like [PEP 709](https://peps.python.org/pep-0709/) and support for the BOLT binary optimizer), delivering an estimated 5% overall performance improvement.

## Type annotations

- [New type annotation syntax](https://docs.python.org/3.12/whatsnew/3.12.html#pep-695-type-parameter-syntax) for generic classes ([PEP 695](https://peps.python.org/pep-0695/)).
- [New override decorator](https://docs.python.org/3.12/whatsnew/3.12.html#pep-698-override-decorator-for-static-typing) for methods ([PEP 698](https://peps.python.org/pep-0698)).

## Deprecations

- The deprecated `wstr` and `wstr_length` members of the C implementation of unicode objects were removed, per [PEP 623](https://peps.python.org/pep-0623/).
- In the `unittest` module, a number of long deprecated methods and classes were removed. (They had been deprecated since Python 3.1 or 3.2).
- The deprecated `smtpd` and `distutils` modules have been removed (see [PEP 594](https://peps.python.org/pep-0594/) and [PEP 632](https://peps.python.org/pep-0632/). The `setuptools` package continues to provide the `distutils` module.
- [A number of other old, broken and deprecated functions, classes and methods](https://docs.python.org/3.12/whatsnew/3.12.html#removed) have been removed.
- Invalid backslash escape sequences in strings now warn with `SyntaxWarning` instead of `DeprecationWarning`, making them more visible. (They will become syntax errors in the future.)
- The internal representation of integers has changed in preparation for performance enhancements. (This should not affect most users as it is an internal detail, but it may cause problems for Cython-generated code.)

For more details on the changes to Python 3.12, see [What’s new in Python 3.12](https://docs.python.org/dev/whatsnew/3.12.html).

# More resources

- [Online Documentation](https://docs.python.org/3.12/).
- [PEP 693](https://www.python.org/dev/peps/pep-0693/), the Python 3.12 Release Schedule.
- Report bugs via [GitHub Issues](https://github.com/python/cpython/issues).
- [Help fund Python and its community](https://www.python.org/psf/donations/).

# And now for something completely different

> They have no need of our help  
> So do not tell me  
> These haggard faces could belong to you or me  
> Should life have dealt a different hand  
> We need to see them for who they really are  
> Chancers and scroungers  
> Layabouts and loungers  
> With bombs up their sleeves  
> Cut-throats and thieves  
> They are not  
> Welcome here  
> We should make them  
> Go back to where they came from  
> They cannot  
> Share our food  
> Share our homes  
> Share our countries  
> Instead let us  
> Build a wall to keep them out  
> It is not okay to say  
> These are people just like us  
> A place should only belong to those who are born there  
> Do not be so stupid to think that  
> The world can be looked at another way
> 
> (now read from bottom to top)

[Refugees](https://brianbilston.com/2016/03/23/refugees/), by [Brian Bilston](https://mastodon.online/@brianbilston).

# We hope you enjoy the new releases!

Thanks to all of the many volunteers who help make Python Development and these releases possible! Please consider supporting our efforts by volunteering yourself or through organization contributions to [the Python Software Foundation](https://www.python.org/psf-landing/).

Your release team,  
Thomas Wouters @thomas  
Ned Deily @nad  
Steve Dower @steve.dower  
Łukasz Langa @ambv

---

<div class="post-metadata">

**Author:** ![jamestwebber](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/jamestwebber/32/12799_2.png) [@jamestwebber](https://discuss.python.org/u/jamestwebber)\
**Post date:** [October 2, 2023, 4:39pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/2 "2023-10-02T16:39:27Z")

</div>

> [@thomas](#):
>
> Python 3.12.0 is the newest major release of the Python programming language, and it contains many new features and optimizations.

A very small nit: I wish these announcements would say “newest _feature_ release”, rather than major.

To counterbalance my nit, I’ll celebrate that my very first\[1\] PR to CPython is in this release. 🎉

* * *

1. and _very_ small

---

<div class="post-metadata">

**Author:** ![pf\_moore](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/pf_moore/32/35_2.png) [@pf\_moore](https://discuss.python.org/u/pf_moore)\
**Post date:** [October 2, 2023, 6:00pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/3 "2023-10-02T18:00:30Z")

</div>

> [@thomas](#):
>
> And now for something completely different

Discourse managed (at least on my browser) to add a scroll bar, so that the whole of this poem was visible _apart_ from the critical “(now read from bottom to top)” line 🙁

It’s only because I followed the link to the original that I spotted it!

---

<div class="post-metadata">

**Author:** ![thomas](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/thomas/32/5492_2.png) [@thomas](https://discuss.python.org/u/thomas)\
**Post date:** [October 2, 2023, 7:15pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/4 "2023-10-02T19:15:24Z")

</div>

> [@pf\_moore](#):
>
> Discourse managed (at least on my browser) to add a scroll bar, so that the whole of this poem was visible _apart_ from the critical “(now read from bottom to top)” line 🙁

Thanks for pointing that out! I’ve changed it to a block quote, which should render the whole thing (I believe)…

---

<div class="post-metadata">

**Author:** ![stoneleaf](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/stoneleaf/32/88_2.png) [@stoneleaf](https://discuss.python.org/u/stoneleaf)\
**Post date:** [October 2, 2023, 7:54pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/5 "2023-10-02T19:54:49Z")

</div>

> [@thomas](#):
>
> I’ve changed it to a block quote

Yup, the whole thing shows up now.

---

<div class="post-metadata">

**Author:** ![h-vetinari](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/h-vetinari/32/1220_2.png) [@h-vetinari](https://discuss.python.org/u/h-vetinari)\
**Post date:** [October 3, 2023, 11:27am UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/6 "2023-10-03T11:27:58Z")

</div>

> [@thomas](#):
>
> The final release of Python 3.12.0 (final) is here!

Congratulations on the new release! 🎉

I wanted to quickly comment here that conda-forge has – for the first time – managed to have launch-day availability of the new Python version and \>1000 packages. 🥳

In the end I decided this fits better as a separate post, but to avoid that it gets “hidden” only in the packaging category, I hope people don’t mind that I [reference](https://discuss.python.org/t/launch-day-availability-of-python-3-12-in-conda-forge/35266) it from here as well.

---

<div class="post-metadata">

**Author:** ![pf\_moore](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/pf_moore/32/35_2.png) [@pf\_moore](https://discuss.python.org/u/pf_moore)\
**Post date:** [October 3, 2023, 12:30pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/7 "2023-10-03T12:30:18Z")

</div>

I’ll also note here that many packages also seem to already have binaries on PyPI - `numpy`, `scipy`, `matplotlib`, `pywin32`, `pillow`, `pandas`, …

Thanks to everyone who puts so much effort into making the lives of early adopters like me so pleasant!

Edit: I just did a quick check, and there are 912 projects with Python 3.12 wheels already. There’s also 669 projects with `abi3` wheels, which will work on Python 3.12 as well. In total, there’s 298,057 projects already available on PyPI with Python 3.12 compatible wheels (obviously that latter number is mostly pure Python projects, though).

---

<div class="post-metadata">

**Author:** ![oscarbenjamin](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/oscarbenjamin/32/1209_2.png) [@oscarbenjamin](https://discuss.python.org/u/oscarbenjamin)\
**Post date:** [October 3, 2023, 7:54pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/8 "2023-10-03T19:54:28Z")

</div>

Thanks everyone for the work on this release!

I just took a look at the [python.org](http://python.org) download page:  
[Download Python | Python.org](https://www.python.org/downloads/)

The information there is currently a bit confusing. There is big yellow text saying

> Download the latest release of Python

and a big yellow button with

> Download Python 3.12.0.

Right below that it says

> Want to help test development versions of Python 3.12? [Prereleases](https://www.python.org/download/pre-releases/), [Docker images](https://quay.io/repository/python-devs/ci-image)

Below that is the list of “active python releases”. It shows Python 3.12 like

> 3.12 [prerelease](https://www.python.org/download/pre-releases/) 2023-10-02 (planned) 2028-10 [PEP 693](https://www.python.org/dev/peps/pep-0693)

So the button at the top points towards installing Python 3.12 but the other information on the page all seems to indicate that 3.12 is in prerelease status which seems inconsistent.

Separately I wonder whether it is a good idea that the big yellow button recommends Python 3.12 on day one of release given that some packages will not be installable yet on 3.12. This page is first hit in a web search for “download python” but for now I would consider that 3.12 is still for early adopters rather than the version that I would recommend for any potential new Python users.

---

<div class="post-metadata">

**Author:** ![steve.dower](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/steve.dower/32/56_2.png) [@steve.dower](https://discuss.python.org/u/steve.dower)\
**Post date:** [October 3, 2023, 7:59pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/9 "2023-10-03T19:59:11Z")

</div>

> [@oscarbenjamin](#):
>
> Separately I wonder whether it is a good idea that the big yellow button recommends Python 3.12 on day one of release given that some packages will not be installable yet on 3.12. This page is first hit in a web search for “download python” but for now I would consider that 3.12 is still for early adopters rather than the version that I would recommend for any potential new Python users.

We try and emphasize that RC is the time for early adopters, including anyone who maintains a package that ought to be available on day 1. Switching over the default as soon as it releases is consistent with that.

Otherwise, once we start on the slope of “3.12.(n+1) is the new 3.12.n”, we won’t ever have a stable release 😉

---

<div class="post-metadata">

**Author:** ![brettcannon](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/brettcannon/32/34895_2.png) [@brettcannon](https://discuss.python.org/u/brettcannon)\
**Post date:** [October 4, 2023, 9:37pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/10 "2023-10-04T21:37:01Z")

</div>

WASI build at [Release CPython 3.12.0 w/ WASI SDK 20 · brettcannon/cpython-wasi-build · GitHub](https://github.com/brettcannon/cpython-wasi-build/releases/tag/v3.12.0) .

---

<div class="post-metadata">

**Author:** ![mwichmann](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/mwichmann/32/1364_2.png) [@mwichmann](https://discuss.python.org/u/mwichmann)\
**Post date:** [October 4, 2023, 10:57pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/11 "2023-10-04T22:57:51Z")

</div>

There’s no perfect answer here. Yes, at the point X.Y is actually released, it’s correct to say the team believes that to be the best, most performant release. At the same time, it’s also true that at that moment, the entire ecosystem will not have caught up. It’s unreasonable to expect that to happen (though this release seems to have had a lot more important packages be ready by release date than in previous cycles, which is superb progress, by the way).

So, not sure what one should say - maybe some footnote on a .0 release that third-party packages may not be available, check with them?

---

<div class="post-metadata">

**Author:** ![steve.dower](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/steve.dower/32/56_2.png) [@steve.dower](https://discuss.python.org/u/steve.dower)\
**Post date:** [October 4, 2023, 11:05pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/12 "2023-10-04T23:05:48Z")

</div>

Such a footnote would only appear on the detailed downloads page, and the “problem” is people clicking on the quick download button without reading the details. So we can’t really win.

There are a few places we do make this decision. For example, the Windows ARM64 build isn’t put on the download button and isn’t in the Windows Store, since it’s too hard for libraries to support it yet. It’s marked experimental at the place where you _could_ download it, but there aren’t any shortcuts (and x64 emulation is good enough that most users will have a better time with the x64 build and libraries than the native build without libraries).

Probably the most useful thing would be if/when pip switches to only installing wheels by default, it might be able to error out saying “no wheels for this version of Python, but they exist for earlier versions” (if that’s the case). That will be better than getting an obscure compiler error, which is how most problems are going to present.

---

<div class="post-metadata">

**Author:** ![oscarbenjamin](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/oscarbenjamin/32/1209_2.png) [@oscarbenjamin](https://discuss.python.org/u/oscarbenjamin)\
**Post date:** [October 4, 2023, 11:39pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/13 "2023-10-04T23:39:41Z")

</div>

> [@mwichmann](#):
>
> this release seems to have had a lot more important packages be ready by release date than in previous cycles

This is true but I also expect this release to have a longer tail of packages that will take more time to catch up. I personally maintain a package python-flint for which the removal of distutils and numpy.distutils means that significant work is needed to be able to support Python 3.12. I can’t say right now when that would happen. I estimate that about 2 days of work are needed but I don’t have that time right now.

---

<div class="post-metadata">

**Author:** ![kenahoo](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/kenahoo/32/5714_2.png) [@kenahoo](https://discuss.python.org/u/kenahoo)\
**Post date:** [October 6, 2023, 10:35pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/14 "2023-10-06T22:35:43Z")

</div>

> [@jamestwebber](#):
>
> A very small nit: I wish these announcements would say “newest _feature_ release”, rather than major.

It sounds like you’re talking about “feature release” as in Semantic Versioning?

Python itself doesn’t use standard Semantic Versioning. The “second part of the dotted decimal” is apparently officially called the “minor” component of the version number, as in `major.minor.micro`. See [https://docs.python.org/3/faq/general.html#how-does-the-python-version-numbering-scheme-work](https://docs.python.org/3/faq/general.html#how-does-the-python-version-numbering-scheme-work) for what I assume is the official statement on the matter - but it doesn’t go into specifics other than the changes will be “less earth-shattering”.

In practice, backwards-incompatible changes do actually happen in `minor` releases (they’re pretty carefully planned in accordance with [PEP 387 – Backwards Compatibility Policy | peps.python.org](https://peps.python.org/pep-0387/#basic-policy-for-backwards-compatibility) , and don’t happen _often_). But the fact that backwards-incompatible changes exist, on purpose, means that these are not “feature releases” as I think you might be expecting.

---

<div class="post-metadata">

**Author:** ![jamestwebber](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/jamestwebber/32/12799_2.png) [@jamestwebber](https://discuss.python.org/u/jamestwebber)\
**Post date:** [October 6, 2023, 11:32pm UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/15 "2023-10-06T23:32:05Z")

</div>

I would be fine with calling it the “newest minor release” too, but I can understand that it carries connotations that don’t feel right. The language in the announcements is “major release” which doesn’t match up with other parts of the documentation.

Regarding “feature release”, that solution was from the discussion in [this issue](https://github.com/python/cpython/issues/105844) and [this one](https://github.com/python/peps/pull/3174#pullrequestreview-1484677867).

---

<div class="post-metadata">

**Author:** ![merwok](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/merwok/32/29_2.png) [@merwok](https://discuss.python.org/u/merwok)\
**Post date:** [October 7, 2023, 3:39am UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/16 "2023-10-07T03:39:20Z")

</div>

The same discussion happened 5 or 10 years ago with none of the same participants as the discussions you’re pointing to! Python doesn’t follow semver but it is fine and good to use the terms feature release and bugfix release for clarity.

---

<div class="post-metadata">

**Author:** ![UltimateLobster](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/ultimatelobster/32/9727_2.png) [@UltimateLobster](https://discuss.python.org/u/UltimateLobster)\
**Post date:** [October 8, 2023, 11:04am UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/17 "2023-10-08T11:04:57Z")

</div>

I’m not sure where is the correct place to post this, but the `/layout` flag is broken on the 64-bit windows installation executable. It seems to fail due to outdated hashes.

---

<div class="post-metadata">

**Author:** ![steve.dower](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/steve.dower/32/56_2.png) [@steve.dower](https://discuss.python.org/u/steve.dower)\
**Post date:** [October 9, 2023, 10:29am UTC](https://discuss.python.org/t/python-3-12-0-final-is-here/35186/18 "2023-10-09T10:29:21Z")

</div>

File a bug at [GitHub - python/cpython: The Python programming language](https://github.com/python/cpython). Make sure to include the log file (it’ll be linked at the end of setup, and for a layout there should only be one file) and the exact command you ran.
