PyPy v8.0.1: release of python 2.7, 3.11, and 3.12 beta released 2026-10-XX¶
Note
This is a pre-release announcement. When the release actually happens, it will be announced on the PyPy blog
The PyPy team is proud to release version 8.0.1 of PyPy after the previous
release on Sept 25, 2026. Some problems with buffer memory leaks were fixed,
and problems around the new strategy to tie RPython objects to non-managed C
PyObject objects were also fixed. The stdlib for 3.11 and 3.12 was updated,
as was the vendored libexpat (to 2.8.5). Internally, we now use pytest3.10
rather than 2.9.2.
The release includes three different interpreters:
PyPy2.7, supporting the syntax and the features of Python 2.7 including the stdlib for CPython 2.7.18+ (the
+is for backported security updates)PyPy3.11, supporting the syntax and the features of Python 3.11, including the stdlib for CPython 3.11.17. Barring security issues, this will be the last release to support 3.11.
PyPy3.12, supporting the syntax and features of Python 3.12, including the stdlib for CPython 3.12.15.
The interpreters are based on much the same codebase, thus the triple release.
We recommend updating. You can find links to download the releases here:
We would like to thank our donors for the continued support of the PyPy project. If PyPy is not quite good enough for your needs, we are available for direct consulting work. If PyPy is helping you out, we would love to hear about it and encourage submissions to our blog via a pull request to https://github.com/pypy/pypy.org
We would also like to thank our contributors and encourage new people to join the project. PyPy has many layers and we need help with all of them: bug fixes, PyPy and RPython documentation improvements, or general help with making RPython’s JIT even better.
If you are a python library maintainer and use C-extensions, please consider making a CFFI version of your library that would be performant on PyPy. Failing that, PyPy will soon support the cp312-abi3 tag for limited ABI wheels. In any case, cibuildwheel supports building wheels for PyPy.
Footnotes
What is PyPy?¶
PyPy is a Python interpreter, a drop-in replacement for CPython. It’s fast (PyPy and CPython performance comparison) due to its integrated tracing JIT compiler.
We also welcome developers of other dynamic languages to see what RPython can do for them.
We provide binary builds for:
x86 machines on most common operating systems (Linux 32/64 bits, Mac OS 64 bits, Windows 64 bits)
64-bit ARM machines running Linux (
aarch64) and macos (macos_arm64).
PyPy supports Windows 32-bit, Linux PPC64 big- and little-endian, Linux ARM 32 bit, RISC-V RV64IMAFD Linux, and s390x Linux but does not release binaries. Please reach out to us if you wish to sponsor binary releases for those platforms. Downstream packagers provide binary builds for debian, Fedora, conda, OpenBSD, FreeBSD, Gentoo, and more.
Changelog¶
For all versions¶
Update embedded OpenSSL to version 3.5.9, including PyPy 2.7
Make flaky tests more reliable
Add reentrant detectors to try to catch recent rpython crashes that seem to have to do with arena contention when testing on a host PyPy, but may be connected to an allocation during GC collection
Use vmprof 0.6.0 version profiles, which include a timestamp (#5598).
Merge work to make RPython support both python2 and python3 (#5601)
Replace the old vendored pytest with v3.10
Drop py3.10 nightly builds from the versions.json served by github actions/setup-python and others. 3.10 is no longer supported, and there is no reason to be using it in CI
Bugfixes¶
Use shared argument types when specializing JIT markers (#5606) A
can_enter_jitargument can be a subclass of the correspondingjit_merge_pointargument. This can then produce wrong pointer types on the C level. More recent gccs reject those as errors (they were warnings before). Instead, use the shared argument repr to insert the correct castFix a bug in the revdb symbolic parser, which is also used by vmprof (#5593)
Fix dict reverse iteration when a iterator clears and refills the dict contents (#5596)
Fix translation when using CPython2.7 (#5586)
Build cycle graphs startblock-to-startblock. This prevents
finallystanzas leaking out of the graph, and prevents a set of problems with locks released in afinallystanza being ignored when unwinding a StackOverflow, which in turn caused hangs or other improper behaviour (#5647)Fix variadic system calls on macos (#5635)
Speedups and enhancements¶
Python 3.11¶
Change the order of arguments to CodeType() to match CPython and PyPy3.12 (uqfoundation/dill#781)
Backport from py3.12:
PickleBufferuses its source object (#5231)
Python 3.11 and 3.12¶
cpyext: guard two more paths with
pyobj_has_w_objto avoid reviving deadw_objduring deallocationAny use of
_ffi.from_bufferin lib_pypy needs to release the buffer (#5589)Fix
HMAC_CTXleak in_hashlib.hmac_new(#5599)Make
LockandRLock‘s ‘lock’ field mutable instead of quasi-immutable (#5602)Avoid consulting
__len__when creating a str, uselen(value)instead (#5609)Propagate lookup error in
match_class_attr(#5611)Update vendored libexpat to 2.8.5
Further improve buffer release, document exactly when bytearray views are released (#5612, #5613, #5614, #5616, #5618)
Refactor buffer exports to use a
BufferExportclass to track exports, in light of all the buffer release problems.Catch lookup errors in
match_class_attr(#5611)On macos, locale defaults to
utf-8if empty (#5638)Fix select tests on MacOS (#5645)
Python 3.12¶
cpyext: Label
PyUnicode_EncodeCodePagewithabi3=Truepost-translation: Improve the distutils-replacement script (#5585)
cpyext: Refactor handling of out-of-band malloced objects with no room for a
ob_pypy_linkprefixcpyext: When handling a memoryviewobject, copy strides/shape instead of aliasing them
Make
ElementTree::ParseErrormessages strings (#5605)cpyext: Implement
PY_VECTORCALL_ARGUMENTS_OFFSETprotocol inPyObject_VectorcallDictAdd missing consts to stats for windows (#5626)
Fix fstring AST to match CPython (#5627)
Refactor and make formatting error message compatible with CPython (#5642)