PyPy v7.3.11: release of python 2.7, 3.8, and 3.9

The PyPy team is proud to release version 7.3.11 of PyPy. As could be expected, the first release of macOS arm64 impacted the macOS x86-64 build, so this is a bug release to restore the ability of macOS users to run PyPy on macOS < 11.0. It also incoporates the latest CPython stdlib updates released the day after 7.3.10 went out, and a few more bug fixes. The release includes three different interpreters:

  • PyPy2.7, which is an interpreter 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.8, which is an interpreter supporting the syntax and the features of Python 3.8, including the stdlib for CPython 3.8.16. Note we intend to drop support for this version in an upcoming release as soon as we release Pyython 3.10.
  • PyPy3.9, which is an interpreter supporting the syntax and the features of Python 3.9, including the stdlib for CPython 3.9.16.

The interpreters are based on much the same codebase, thus the multiple release. This is a micro release, all APIs are compatible with the other 7.3 releases and follows quickly on the heals of the 7.3.10 release on Dec 6.

We recommend updating. You can find links to download the v7.3.11 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. Since the previous release, we have accepted contributions from one new contributor, thanks for pitching in, and welcome to the project!

If you are a python library maintainer and use C-extensions, please consider making a HPy / CFFI / cppyy version of your library that would be performant on PyPy. In any case, both cibuildwheel and the multibuild system support building wheels for PyPy.

What is PyPy?

PyPy is a Python interpreter, a drop-in replacement for CPython 2.7, 3.8 and 3.9. It’s fast (PyPy and CPython 3.7.4 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).
  • Apple M1 arm64 machines (macos_arm64).
  • s390x running Linux

PyPy support Windows 32-bit, Linux PPC64 big- and little-endian, and Linux ARM 32 bit, 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

Bugfixes

  • Fix several JIT optimizer bugs using SMT solvers and fuzzing. The bugs were around integer optimations (issue 3832).
  • Only use pthread_jit_write_protect_np on macOS arm64 (issue 3865).
  • Add sysconfig.get_config_var('CONFINCLUDEPY') needed in some cross-compilations
  • Package tkinter for macOS. Previously the portable builds did not include it (issues 3760, 3868).
  • Fix memory leak in certificate validation in _ssl (issue 3871)
  • Add __qualname__ to some cpyext types (issue 3878_)
  • Clean up some deprecated functions in OpenSSL wrapper _ssl

Speedups and enhancements

  • Add pinned object count to gc collection stats reported in the on_gc_collect hook

Python 3.8+

  • Update stdlib for PyPy3.8 to 3.8.16 and for PyPy3.9 to 3.9.16. This brings some security fixes, as documented in the CPython release note
  • Ensure that only valid values are passed from Py_UNICODE_* calls to unicodedb lookups (issue 3870)
  • Fix ast lineno, end_lineno, end_col_number around decorators (issue 3876)
  • Re-apply fix for issue 3436 since our ensurepip setuptools version is < 59.0
  • In _tkinter, getboolean, getint, getdouble accepts a Tcl_Obj (bpo-23880)
  • Make builtin credits, license() more like CPython
  • Add docstrings to some builtin classes and methods

Python 3.9

  • Fix pure-python implmentation of functools (issue 3869). see also cpython GH-100242
  • Remove type.__ne__, the inherited behaviour from object.__ne__ is the correct one (issue 3879)
  • Fix invalid parsing rule for genexps as the non-singular argument in a call (issue 3873)