#FreeThreaded

Hugo van Kemenadehugovk
2025-06-17

Just released: Python 3.14.0 beta 3! ๐Ÿš€๐Ÿ

๐Ÿฅง All the good stuff of b2 but also:

๐Ÿฅง Free-threaded Python is officially supported! (PEP 779)

๐Ÿฅง Subinterpreters in the stdlib! (PEP 734)

Do you maintain a Python package? Please test 3.14.

If you find a bug now, we can fix it before October, which helps everyone. And you might find some places in your code to update as well, which helps you.

discuss.python.org/t/python-3-

Hugo van Kemenadehugovk
2025-06-16

@sirosen @ancoghlan @brianokken

Yes, let's test our projects with free-threaded in CI! Here's how to do it with GitHub Actions:

hugovk.dev/blog/2025/free-thre

And see py-free-threading.github.io for more guides.


Hugo van Kemenadehugovk
2025-06-15

Exciting news!

PEP 779 ("Criteria for supported status for free-threaded Python") has been accepted, which means free-threaded Python is now a supported build!

We'll drop the "experimental" label already in 3.14 beta 3, due on Tuesday!

Details:
discuss.python.org/t/pep-779-c

Hugo van Kemenadehugovk
2025-03-25

GitHub Actions now supports free-threaded Python!

I wrote up how to add it your workflows so you can start testing free-threaded Python 3.13 and 3.14 with either actions/setup-python or actions/setup-uv.

hugovk.dev/blog/2025/free-thre

Hugo van Kemenadehugovk
2024-10-28

๐Ÿงต๐Ÿ›ž I made a thing!

hugovk.github.io/free-threaded tracks how many of the top 360 PyPI packages have free-threaded wheels.

๐ŸŸข Green packages (currently 3%) offer has free-threaded wheels

โšช Uncoloured packages (82%) offer pure-Python wheels

๐ŸŸ  Orange packages (16%) have no wheels ready for free-threading (yet!)

See also Quansight Labs' py-free-threading.github.io/tr for a smaller yet fine-grained tracker that also includes build tools.

A website screenshot. Top left has a pie chart with 304/360 in the centre, with mostly black slices, but some orange and a few green. There's text description at the bottom left.

On the right is a long list of Python packages, with a colour matching their free-threaded support.
2024-10-15

๐Ÿ๐Ÿš€๐ŸŽจ #Pillow 11.0.0 has been released!

* Added support for #Python 3.13, including experimental #freethreaded wheels!

* Dropped EOL 3.8

* Removed PSFile, PyAccess and Image.USE_CFFI_ACCESS, TiffImagePlugin IFD_LEGACY_API, and support for WebP 0.4

* A bunch of new deprecations, to be removed in 12.0.0 in October 2025

* Default resampling filter for I;16* image modes has changed to Image.BICUBIC

* XMP data can be saved to JPEG and MPO files

pillow.readthedocs.io/en/stabl

#PythonPillow #release

11.0.0 (2024-10-15)
Backwards Incompatible Changes
Python 3.8
Pillow has dropped support for Python 3.8, which reached end-of-life in October 2024.

Python 3.12 on macOS <= 10.12
The latest version of Python 3.12 only supports macOS versions 10.13 and later, and so Pillow has also updated the deployment target for its prebuilt Python 3.12 wheels.

PSFile
The PSFile class was removed in Pillow 11 (2024-10-15). This class was only made as a helper to be used internally, so there is no replacement. If you need this functionality though, it is a very short class that can easily be recreated in your own code.

PyAccess and Image.USE_CFFI_ACCESS
Since Pillowโ€™s C API is now faster than PyAccess on PyPy, PyAccess has been removed. Pillowโ€™s C API will now be used on PyPy instead.

Image.USE_CFFI_ACCESS, for switching from the C API to PyAccess, was similarly removed.

TiffImagePlugin IFD_LEGACY_API
An unused setting, TiffImagePlugin.IFD_LEGACY_API, has been removed.

WebP 0.4
Support for WebP 0.4 and earlier has been removed; WebP 0.5 is the minimum supported.Deprecations
FreeType 2.9.0
Deprecated since version 11.0.0.

Support for FreeType 2.9.0 is deprecated and will be removed in Pillow 12.0.0 (2025-10-15), when FreeType 2.9.1 will be the minimum supported.

We recommend upgrading to at least FreeType 2.10.4, which fixed a severe vulnerability introduced in FreeType 2.6 (CVE 2020-15999).

Get internal pointers to objects
Deprecated since version 11.0.0.

Image.core.ImagingCore.id and Image.core.ImagingCore.unsafe_ptrs have been deprecated and will be removed in Pillow 12 (2025-10-15). They were used for obtaining raw pointers to ImagingCore internals. To interact with C code, you can use Image.Image.getim(), which returns a Capsule object.

ICNS (width, height, scale) sizes
Deprecated since version 11.0.0.

Setting an ICNS image size to (width, height, scale) before loading has been deprecated. Instead, load(scale) can be used.

Image isImageType()
Deprecated since version 11.0.0.

Image.isImageType(im) has been deprecated. Use isinstance(im, Image.Image) instead.

ImageMath.lambda_eval and ImageMath.unsafe_eval options parameter
Deprecated since version 11.0.0.

The options parameter in lambda_eval() and unsafe_eval() has been deprecated. One or more keyword arguments can be used instead.

JpegImageFile.huffman_ac and JpegImageFile.huffman_dc
Deprecated since version 11.0.0.

See the release notes for more.API Changes
Default resampling filter for I;16* image modes
The default resampling filter for I;16, I;16L, I;16B and I;16N has been changed from Image.NEAREST to Image.BICUBIC, to match the majority of modes.

API Additions
Writing XMP bytes to JPEG and MPO
XMP data can now be saved to JPEG files using an xmp argument:

im.save("out.jpg", xmp=b"test")
The data can also be set through info, for use when saving either JPEG or MPO images:

im.info["xmp"] = b"test"
im.save("out.jpg")
Other Changes
Python 3.13
Pillow 10.4.0 had wheels built against Python 3.13 beta, available as a preview to help others prepare for 3.13, and to ensure Pillow could be used immediately at the release of 3.13.0 final (2024-10-07, PEP 719).

Pillow 11.0.0 now officially supports Python 3.13.

Support has also been added for the experimental free-threaded mode of PEP 703.

Python 3.13 only supports macOS versions 10.13 and later.

C-level Flags
Some compiling flags like WITH_THREADING, WITH_IMAGECHOPS, and other WITH_* were removed. These flags were not available through the build system, but they could be edited in the C source.
Hynek Schlawackhynek
2024-10-15
env UV_PYTHON_DOWNLOADS=true UV_PYTHON_PREFERENCE=only-managed  uv run -p 3.13t python -c 'import sysconfig; print(sysconfig.get_config_var("Py_GIL_DISABLED"))'
1

IOW: we can now have easy on-demand free-threaded Python builds
Hugo van Kemenadehugovk
2024-08-03

๐Ÿš€๐Ÿงต๐Ÿ Big thanks to @lysnikolaou of Quansight Labs for helping us get @pillow ready for free-threaded Python 3.13 (we did some work at the @europython sprints).

See labs.quansight.org/blog/free-t and py-free-threading.github.io to learn more.

We also upload nightly free-threaded (cp313t) wheels to help the community test:
anaconda.org/scientific-python

And we'll upload them to PyPI as part of the Q3 release in October.

Hugo van Kemenadehugovk
2024-06-06

๐Ÿ๐Ÿงช Python 3.13 beta 2 is out!

discuss.python.org/t/3-13-0b2-

The macOS installer joins the Windows installer in adding an option to install free-threaded binaries as python3.13t, making it even easier to try it out.

See github.com/python/cpython/issu for all the details, and dev.to/hugovk/help-us-test-fre for an overview.


Hugo van Kemenadehugovk
2024-05-14

๐Ÿ๐Ÿงช Python 3.13.0 is due out in October 2024 and work is underway to implement *experimental support* for PEP 703 "Making the Global Interpreter Lock Optional in CPython".

As the Steering Council noted in their acceptance of the PEP, to succeed it's important to have community support.

I wrote a little guide on how you can help test out the beta in your project, and help us find bugs in CPython:

dev.to/hugovk/help-us-test-fre

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst