Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Python 3.12 #6941

Closed
10 tasks done
hugovk opened this issue Feb 11, 2023 · 15 comments · Fixed by #7508
Closed
10 tasks done

Add support for Python 3.12 #6941

hugovk opened this issue Feb 11, 2023 · 15 comments · Fixed by #7508
Milestone

Comments

@hugovk
Copy link
Member

hugovk commented Feb 11, 2023

Tracking issue for getting the pieces into place to:

  • release wheels for Python 3.12.0 beta in Pillow 10.0.0, released on 2023-07-01
  • support Python 3.12.0 final in Pillow 10.1.0, released on 2023-10-15

TODO

Non-blockers

References:

@hugovk hugovk added this to the 10.0.0 milestone Feb 11, 2023
@hugovk hugovk changed the title Add support for Python 3.11 Add support for Python 3.12 Feb 11, 2023
@hugovk hugovk pinned this issue Apr 11, 2023
@radarhere
Copy link
Member

radarhere commented May 24, 2023

deadsnakes decided not to support Python 3.12 on Bionic, the last 32-bit Ubuntu. We've discussed dropping support for 32-bit briefly before, so the simplest thing is for us to not release 32-bit Linux Python 3.12 wheels.

@hugovk
Copy link
Member Author

hugovk commented May 24, 2023

That should be fine.

Looking at a couple of projects:

We (NumPy) will continue to test (but not provide wheels for) 32-bit linux.

We [pyca/cryptography] stopped testing on 32-bit Linux, and stopped building 32-bit Linux wheels several years ago, and that produced no problems.

https://discuss.python.org/t/dropping-32-bit-packages/5476/16?u=hugovk


Looking at some numbers, here's a week's worth of Pillow file downloads from PyPI, fetched using https://github.com/ofek/pypinfo:

pypinfo --days 7 --limit 1000 pillow version file

1000.txt

Filtering for the most recent release, for Python 3.11, and Linux (grep "9.5.0-cp311.*linux" 1000.txt) shows a very small number for i686:

version file download_count percentage
9.5.0 Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl 219,628 91.71 %
9.5.0 Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl 7,407 3.09 %
9.5.0 Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl 5,810 2.43 %
9.5.0 Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 5,233 2.19 %
9.5.0 Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl 771 0.32 %
9.5.0 Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 405 0.17 %
9.5.0 Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl 226 0.09 %
  total 239,480 100.00 %

@hugovk
Copy link
Member Author

hugovk commented May 24, 2023

Whilst we're here, Windows is quite low for win32:

version file download_count percentage
9.5.0 Pillow-9.5.0-cp311-cp311-win_amd64.whl 150,653 98.82 %
9.5.0 Pillow-9.5.0-cp311-cp311-win32.whl 1,580 1.04 %
9.5.0 Pillow-9.5.0-cp311-cp311-win_arm64.whl 225 0.15 %
  total 152,458 100.00 %

@wiredfool
Copy link
Member

I'd say just drop the 32 bit builds, especially for new pythons.

@hugovk
Copy link
Member Author

hugovk commented May 29, 2023

Sounds good.

So let's not create 32-bit wheels for 3.12. Do we still want to test 32-bit for 3.12?

The next Pillow 10.0.0 is a major bump so it's a good opportunity to drop things:

  • For 3.11, shall we drop 32-bit wheels and/or testing?

  • And older ones, 3.10-3.8?

For Linux, the *i686.whl numbers are very low for all versions (0.01% - 0.09%):

Details
version file download_count percentage
9.5.2 Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl 219,628 91.71 %
9.5.2 Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl 7,407 3.09 %
9.5.2 Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl 5,810 2.43 %
9.5.2 Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 5,233 2.19 %
9.5.2 Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl 771 0.32 %
9.5.2 Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 405 0.17 %
9.5.2 Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl 226 0.09 %
  total 239,480 100 %
       
9.5.2 Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl 788,288 91.90 %
9.5.2 Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 46,996 5.48 %
9.5.2 Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl 13,842 1.61 %
9.5.2 Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl 6,597 0.77 %
9.5.2 Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl 934 0.11 %
9.5.2 Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 882 0.10 %
9.5.2 Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl 224 0.03 %
  total 857,763 100 %
       
9.5.2 Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl 910,193 84.64 %
9.5.2 Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 137,166 12.75 %
9.5.2 Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl 15,810 1.47 %
9.5.2 Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 7,066 0.66 %
9.5.2 Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl 4,184 0.39 %
9.5.2 Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl 542 0.05 %
9.5.2 Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl 462 0.04 %
  total 1,075,423 100 %
       
9.5.2 Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl 924,301 51.40 %
9.5.2 Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 856,048 47.60 %
9.5.2 Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 7,569 0.42 %
9.5.2 Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl 7,523 0.42 %
9.5.2 Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl 2,343 0.13 %
9.5.2 Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl 355 0.02 %
9.5.2 Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl 241 0.01 %
  total 1,798,380 100 %

For Windows, *win32.whl are a bigger proportion but still low (0.90% - 5.63%):

Details
version file download_count percentage
9.5.2 Pillow-9.5.0-cp311-cp311-win_amd64.whl 150,653 98.82 %
9.5.2 Pillow-9.5.0-cp311-cp311-win32.whl 1,580 1.04 %
9.5.2 Pillow-9.5.0-cp311-cp311-win_arm64.whl 225 0.15 %
  total 152,458 100.00 %
       
9.5.2 Pillow-9.5.0-cp310-cp310-win_amd64.whl 198,304 99.10 %
9.5.2 Pillow-9.5.0-cp310-cp310-win32.whl 1,801 0.90 %
  total 200,105 100.00 %
       
9.5.2 Pillow-9.5.0-cp39-cp39-win_amd64.whl 89,231 98.12 %
9.5.2 Pillow-9.5.0-cp39-cp39-win32.whl 1,710 1.88 %
  total 90,941 100.00 %
       
9.5.2 Pillow-9.5.0-cp38-cp38-win_amd64.whl 71,998 94.37 %
9.5.2 Pillow-9.5.0-cp38-cp38-win32.whl 4,298 5.63 %
  total 76,296 100 %

@radarhere
Copy link
Member

python-pillow/pillow-wheels#383 has added Python 3.12 macOS and Linux wheels, excluding 32-bit wheels, and albeit without fribidi, harfbuzz and raqm on macOS until #7167 is resolved.

@cgohlke
Copy link
Contributor

cgohlke commented Jun 6, 2023

Pillow-9.5.0 works well on Python 3.12.0b2 on Windows:

>py -3.12 -X dev -m pytest -v Tests
======================================================================================================= test session starts ========================================================================================================
platform win32 -- Python 3.12.0b2, pytest-7.3.1, pluggy-1.0.0 -- X:\Python312\python.exe
cachedir: .pytest_cache
--------------------------------------------------------------------
Pillow 9.5.0
Python 3.12.0b2 (tags/v3.12.0b2:e6c0efa, Jun  6 2023, 15:37:48) [MSC v.1935 64 bit (AMD64)]
--------------------------------------------------------------------
Python modules loaded from X:\Python312\Lib\site-packages\PIL
Binary modules loaded from X:\Python312\Lib\site-packages\PIL
--------------------------------------------------------------------
--- PIL CORE support ok, compiled for 9.5.0
--- TKINTER support ok, loaded 8.6
--- FREETYPE2 support ok, loaded 2.13.0
--- LITTLECMS2 support ok, loaded 2.14
--- WEBP support ok, loaded 1.3.0
--- WEBP Transparency support ok
--- WEBPMUX support ok
--- WEBP Animation support ok
--- JPEG support ok, compiled for libjpeg-turbo 2.1.92
--- OPENJPEG (JPEG2000) support ok, loaded 2.5.0
--- ZLIB (PNG/ZIP) support ok, loaded 1.2.13
--- LIBTIFF support ok, loaded 4.5.0
--- RAQM (Bidirectional Text) support ok, loaded 0.10.0, fribidi 1.0.12, harfbuzz 7.3.0
*** LIBIMAGEQUANT (Quantization method) support not installed
*** XCB (X protocol) support not installed
--------------------------------------------------------------------

rootdir: D:\Build\Pillow\Pillow-9.5.0
configfile: setup.cfg
plugins: timeout-2.1.0
collected 3077 items / 2 skipped

Tests/test_000_sanity.py::test_sanity PASSED                                                                                                                                                                                  [  0%]
Tests/test_binary.py::test_standard PASSED                                                                                                                                                                                    [  0%]
Tests/test_binary.py::test_little_endian PASSED                                                                                                                                                                               [  0%]
Tests/test_binary.py::test_big_endian PASSED                                                                                                                                                                                  [  0%]
Tests/test_bmp_reference.py::test_bad PASSED                                                                                                                                                                                  [  0%]
Tests/test_bmp_reference.py::test_questionable PASSED                                                                                                                                                                         [  0%]
Tests/test_bmp_reference.py::test_good PASSED                                                                                                                                                                                 [  0%]
Tests/test_box_blur.py::test_imageops_box_blur PASSED                                                                                                                                                                         [  0%]
Tests/test_box_blur.py::test_color_modes PASSED                                                                                                                                                                               [  0%]
Tests/test_box_blur.py::test_radius_0 PASSED                                                                                                                                                                                  [  0%]
Tests/test_box_blur.py::test_radius_0_02 PASSED                                                                                                                                                                               [  0%]
Tests/test_box_blur.py::test_radius_0_05 PASSED                                                                                                                                                                               [  0%]
Tests/test_box_blur.py::test_radius_0_1 PASSED                                                                                                                                                                                [  0%]
Tests/test_box_blur.py::test_radius_0_5 PASSED                                                                                                                                                                                [  0%]
Tests/test_box_blur.py::test_radius_1 PASSED                                                                                                                                                                                  [  0%]
Tests/test_box_blur.py::test_radius_1_5 PASSED                                                                                                                                                                                [  0%]
Tests/test_box_blur.py::test_radius_bigger_then_half PASSED                                                                                                                                                                   [  0%]
Tests/test_box_blur.py::test_radius_bigger_then_width PASSED                                                                                                                                                                  [  0%]
Tests/test_box_blur.py::test_extreme_large_radius PASSED                                                                                                                                                                      [  0%]
Tests/test_box_blur.py::test_two_passes PASSED                                                                                                                                                                                [  0%]
Tests/test_box_blur.py::test_three_passes PASSED                                                                                                                                                                              [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_wrong_args PASSED                                                                                                                                                        [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_correct_args PASSED                                                                                                                                                      [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_wrong_mode PASSED                                                                                                                                                        [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_correct_mode PASSED                                                                                                                                                      [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_identities PASSED                                                                                                                                                        [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_identities_4_channels PASSED                                                                                                                                             [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_copy_alpha_channel PASSED                                                                                                                                                [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_channels_order PASSED                                                                                                                                                    [  0%]
Tests/test_color_lut.py::TestColorLut3DCoreAPI::test_overflow PASSED                                                                                                                                                          [  0%]
Tests/test_color_lut.py::TestColorLut3DFilter::test_wrong_args PASSED                                                                                                                                                         

<snip>

Tests/test_shell_injection.py::TestShellInjection::test_load_djpeg_filename SKIPPED (Requires Unix or macOS)                                                                                                                  [ 99%]
Tests/test_shell_injection.py::TestShellInjection::test_save_cjpeg_filename SKIPPED (Requires Unix or macOS)                                                                                                                  [ 99%]
Tests/test_shell_injection.py::TestShellInjection::test_save_netpbm_filename_bmp_mode SKIPPED (Netpbm not available)                                                                                                          [ 99%]
Tests/test_shell_injection.py::TestShellInjection::test_save_netpbm_filename_l_mode SKIPPED (Netpbm not available)                                                                                                            [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash_1.tif] SKIPPED (test image not found)                                                                                                                        [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash_2.tif] SKIPPED (test image not found)                                                                                                                        [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-2020-10-test.tif] PASSED                                                                                                                                     [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-0c7e0e8e11ce787078f00b5b0ca409a167f070e0.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-0e16d3bfb83be87356d026d66919deaefca44dac.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-1152ec2d1a1a71395b6f2ce6721c38924d025bf3.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-1185209cf7655b5aed8ae5e77784dfdd18ab59e9.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-338516dbd2f0e83caddb8ce256c22db3bd6dc40f.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-4f085cc12ece8cde18758d42608bed6a2a2cfb1c.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-86214e58da443d2b80820cff9677a38a33dcbbca.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-f46f5b2f43c370fe65706c11449f567ecc345e74.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-63b1dffefc8c075ddc606c0a2f5fdc15ece78863.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-74d2a78403a5a59db1fb0a2b8735ac068a75f6e3.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-81154a65438ba5aaeca73fd502fa4850fbde60f8.tif] SKIPPED (test image not found)                                                                                 [ 99%]
Tests/test_tiff_crashes.py::test_tiff_crashes[Tests/images/crash-0da013a13571cc8eb457a39fee8db18f8a3c7127.tif] PASSED                                                                                                         [ 99%]
Tests/test_tiff_ifdrational.py::test_sanity PASSED                                                                                                                                                                            [ 99%]
Tests/test_tiff_ifdrational.py::test_ranges PASSED                                                                                                                                                                            [ 99%]
Tests/test_tiff_ifdrational.py::test_nonetype PASSED                                                                                                                                                                          [ 99%]
Tests/test_tiff_ifdrational.py::test_ifd_rational_save PASSED                                                                                                                                                                 [ 99%]
Tests/test_util.py::test_is_path PASSED                                                                                                                                                                                       [ 99%]
Tests/test_util.py::test_path_obj_is_path PASSED                                                                                                                                                                              [ 99%]
Tests/test_util.py::test_is_not_path PASSED                                                                                                                                                                                   [ 99%]
Tests/test_util.py::test_is_directory PASSED                                                                                                                                                                                  [ 99%]
Tests/test_util.py::test_is_not_directory PASSED                                                                                                                                                                              [ 99%]
Tests/test_util.py::test_deferred_error PASSED                                                                                                                                                                                [ 99%]
Tests/test_webp_leaks.py::TestWebPLeaks::test_leak_load SKIPPED (Requires Unix or macOS)                                                                                                                                      [100%]

========================================================================================================= warnings summary =========================================================================================================
Tests/test_file_wmf.py::test_load_raw
Tests/test_file_wmf.py::test_load
  X:\Python312\Lib\site-packages\PIL\ImageFile.py:349: ResourceWarning: unclosed file <_io.BufferedReader name='Tests/images/drawing.emf'>
    self.__dict__ = image.__dict__
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

Tests/test_file_wmf.py::test_load_raw
Tests/test_file_wmf.py::test_load_set_dpi
  X:\Python312\Lib\site-packages\PIL\ImageFile.py:349: ResourceWarning: unclosed file <_io.BufferedReader name='Tests/images/drawing.wmf'>
    self.__dict__ = image.__dict__
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/h
[Pillow-9.5.0-cp312-win.zip](https://github.com/python-pillow/Pillow/files/11671080/Pillow-9.5.0-cp312-win.zip)
ow-to/capture-warnings.html#resource-warnings for more info.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
===================================================================================================== short test summary info ======================================================================================================
SKIPPED [1] Tests\test_pyroma.py:5: Pyroma not installed
SKIPPED [1] Tests\oss-fuzz\test_fuzzers.py:11: Fuzzer is linux only
SKIPPED [1] Tests\test_features.py:68: libimagequant not available
SKIPPED [1] Tests\test_file_gif.py:334: Netpbm not available
SKIPPED [1] Tests\test_file_gif.py:345: Netpbm not available
SKIPPED [4] Tests\test_file_jpeg2k.py:344: Extra image files not installed
SKIPPED [1] Tests\test_file_msp.py:57: Extra image files not installed
SKIPPED [1] Tests\test_file_msp.py:70: Even More Extra image files not installed
SKIPPED [1] Tests\test_file_png.py:785: Requires Unix or macOS
SKIPPED [1] Tests\test_file_sun.py:34: Extra image files not installed
SKIPPED [1] Tests\test_file_tiff.py:787: Extra image files not installed
SKIPPED [1] Tests\test_font_leaks.py:20: Requires Unix or macOS
SKIPPED [1] Tests\test_font_leaks.py:31: Requires Unix or macOS
SKIPPED [1] Tests\test_image.py:211: Test requires opening tempfile twice
SKIPPED [1] Tests\test_image_fromqimage.py:44: Qt bindings are not installed
SKIPPED [1] Tests\test_image_fromqimage.py:49: Qt bindings are not installed
SKIPPED [1] Tests\test_image_fromqimage.py:54: Qt bindings are not installed
SKIPPED [1] Tests\test_image_fromqimage.py:59: Qt bindings are not installed
SKIPPED [1] Tests\test_image_fromqimage.py:64: Qt bindings are not installed
SKIPPED [1] Tests\test_image_quantize.py:21: libimagequant not available
SKIPPED [1] Tests\test_imagedraw.py:1002: failing
SKIPPED [2] Tests\test_imagefont.py:546: requires Unix or macOS
SKIPPED [2] Tests\test_imagefontctl.py:233: fails with this font
SKIPPED [1] Tests\test_imagegrab.py:25: xcb not available
SKIPPED [1] Tests\test_imagegrab.py:48: xcb not available
SKIPPED [1] Tests\test_imageqt.py:20: Qt bindings are not installed
SKIPPED [1] Tests\test_imageqt.py:49: Qt bindings are not installed
SKIPPED [1] Tests\test_imageqt.py:63: Qt bindings are not installed
SKIPPED [5] Tests\test_imageshow.py:44: Only run on CIs; hangs on Windows CIs
SKIPPED [1] Tests\test_imageshow.py:82: IPython not installed
SKIPPED [1] Tests\test_imageshow.py:94: Only run on CIs; hangs on Windows CIs
SKIPPED [1] Tests\test_qt_image_qapplication.py:54: Qt bindings are not installed
SKIPPED [5] Tests\test_qt_image_toqimage.py:19: Qt bindings are not installed
SKIPPED [1] Tests\test_shell_injection.py:25: Requires Unix or macOS
SKIPPED [1] Tests\test_shell_injection.py:34: Requires Unix or macOS
SKIPPED [1] Tests\test_shell_injection.py:39: Netpbm not available
SKIPPED [1] Tests\test_shell_injection.py:45: Netpbm not available
SKIPPED [3] Tests\test_tiff_crashes.py:50: test image not found
SKIPPED [1] Tests\test_webp_leaks.py:15: Requires Unix or macOS
XFAIL Tests/test_file_palm.py::test_p_mode - Palm P image is wrong
XFAIL Tests/test_image_access.py::TestEmbeddable::test_embeddable - failing test
XFAIL Tests/test_image_resample.py::TestCoreResampleAlphaCorrect::test_levels_rgba - Current implementation isn't precise enough
XFAIL Tests/test_image_resample.py::TestCoreResampleAlphaCorrect::test_levels_la - Current implementation isn't precise enough
================================================================================ 3021 passed, 54 skipped, 4 xfailed, 4 warnings in 69.91s (0:01:09) ================================================================================

Pillow-9.5.0-cp312-win.zip

@hugovk
Copy link
Member Author

hugovk commented Jun 23, 2023

re: #6941 (comment)

I suggest we drop all the 32-bit wheels and testing. If there's a lot of demand or very good reason, we can always add something back (e.g. 3.8 on Windows has a slightly larger percentage).

@wiredfool
Copy link
Member

Sorry, I'm on holiday here so this is a little late --

I'm not sure if there are any remaining platforms were 32 bit is really a going concern, but I'd view it as a minor platform in the same way that we support S390 or Big Endian -- good to keep compatibility with from a correctness POV, but we're not building wheels. There's nothing in 32 bit to my knowledge where dropping it really streamlines our code.

@hugovk
Copy link
Member Author

hugovk commented Jun 26, 2023

Okay, let's keep some representative testing of 32-bit on the CI. I'd say we can leave the docker-images changes as is.

There's nothing in 32 bit to my knowledge where dropping it really streamlines our code.

Yeah, #7228 was mostly test bits and pieces.

@radarhere
Copy link
Member

radarhere commented Jun 27, 2023

I've created #7234 to restore 32-bit support, without restoring most of the CI jobs. I've only restored 32-bit Debian 12.

@radarhere
Copy link
Member

We later also restored a Windows 32-bit job - #7234 (comment)

@radarhere
Copy link
Member

Pillow 10.0.0 has now been released with Python 3.12 beta wheels.

cas-- added a commit to cas--/Deluge that referenced this issue Sep 18, 2023
Pillow have dropped 32-bit wheels from v10 onwards so force install of
older v9 wheels since we don't want to build from src.

Refs: python-pillow/Pillow#6941 (comment)
cas-- added a commit to deluge-torrent/deluge that referenced this issue Sep 18, 2023
Pillow have dropped 32-bit wheels from v10 onwards so force install of
older v9 wheels since we don't want to build from src.

Refs: python-pillow/Pillow#6941 (comment)
@radarhere
Copy link
Member

Pillow 10.1.0 has now been released with Python 3.12 final wheels.

@radarhere
Copy link
Member

I suggest we drop all the 32-bit wheels and testing. If there's a lot of demand or very good reason, we can always add something back (e.g. 3.8 on Windows has a slightly larger percentage).

Windows 32-bit wheels have now been restored in #7580

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants