-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Release Pillow 11.2.0 on April 1, 2025 #8722
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
Comments
Release under way: https://github.com/python-pillow/Pillow/actions/runs/14194276478 |
Wheel build done. But we've finally hit the PyPI project limit of 10 GB during upload:
https://github.com/python-pillow/Pillow/actions/runs/14194276478/job/39774057701 I'll request an increase. 73/80 wheels files made it up, sdist not there yet. |
The last release had 70 wheels and an sdist and is about 296 MB, an average 4.2 MB per file. https://pypi.org/project/pillow/11.1.0/#files This one is 80 wheels and an sdist and is 1.15 GB, an average of 14.2 MB per file. https://github.com/python-pillow/Pillow/actions/runs/14194276478 |
It's caused by the new AVIF binaries (#5201). A couple of comparisons.
The avif .so file is a lot bigger than the next biggest .so file. In the manylinux wheel:
In the macOS wheel:
Wheel files are zip files which means the .so files are compressed, but it makes our release more than 3x as big. |
|
Requested a limit increase from 10 GB to 20 GB: pypi/support#6014. Opened #8856 to see if we can reduce the wheel size. |
While the release is in a half-released state, plus there's some uncertainty about the wheel sizes, I suggest we "yank" 11.2.0 on PyPI. Yanking is a reversible action, the files remain on PyPI but are only installed if you specifically request 11.2.0. You won't get it with a normal install or upgrade. If we choose not to do anything about the wheel size for this release, and when we get a limit increase, we can un-yank the release and upload the remaining files. |
@aclark4life / @wiredfool Please could you give @radarhere and me owner permission on PyPI so we can yank this release? |
@hugovk Done |
Thanks, 11.2.0 has been yanked for now. |
@wiredfool @hugovk @radarhere thanks for all the extra hard work getting this one out |
Are we planning to wait for PyPI or shrink the wheels or both? I assume they'll grant the request… at some point… but I'm not sure if we can get an accurate ETA? |
We don't have an accurate ETA, maybe about a month or so looking at other requests? My thinking:
This way we're not immediately blocked by the PyPI increase. We will still need an increase, we would have hit in an couple of releases or so anyway. |
Sounds good to me. |
Cool in that case do we have an ETA on shrink-wheel release? I don't think here is any particular urgency, just curious. Thanks all |
Perhaps this weekend, or early next week? As soon as we decide on one of: |
Anyone want to merge #8876 and release Pillow 11.2? 😄 |
If you're giving the green light, I'm happy to do so. |
Great! Let's confirm with @hugovk and then go for it, thanks. |
I'm AFK right now and can check it over later today, and do the release. Good news, we got the PyPI increase: And they also asked if we can use the Limited API, which would drastically reduce the amount of wheels we need. I'm not sure how feasible that is for something of Pillow's vintage and size, but something to look into at some point. https://docs.python.org/3/c-api/stable.html#limited-c-api For the release, let's stick to the plan of deleting 11.2.0 and doing 11.2.1. Let's put something in the release notes to say why this is 11.2.1 and 11.2.0 is pining for the fjörds. Are there any other PRs that are important to include in this release, beyond the dependency and docs updates? |
No, I don't think anything else stands out.
I attempted this briefly, and ran into a problem with PyTypeObject - https://docs.python.org/3/c-api/typeobj.html#static-types
|
|
11.2.0 tag deleted. For the record, it was commit 09adcfb. ❯ git show 11.2.0
Found existing alias for "git show". You should use: "gsh"
commit 09adcfb4e4bd1ad57896ea176a021d396a7965f4 (tag: 11.2.0)
Author: Hugo van Kemenade <[email protected]>
Date: Tue Apr 1 12:49:21 2025 +0300
11.2.0 version bump
Δ src/PIL/_version.py
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
─────┐
• 1: │
─────┘
1 ⋮ 1 │# Master version for Pillow
2 ⋮ 2 │from __future__ import annotations
3 ⋮ 3 │
4 ⋮ │__version__ = "11.2.0.dev0"
⋮ 4 │__version__ = "11.2.0" |
Let's continue 11.2.1 in #8886. |
@hugovk Is there any scenario in which we'd leave the yanked release in place? Or to put it another way, isn't yanking sufficient and preferable over deleting in order to prevent downloads and leave a trail of what happened? That's my current understanding but I could be wrong 😄 |
It's already deleted, but in theory, if it was left as yanked, then We don't want that 11.2.0 install to happen in this case, because we removed a feature from there without our normal one-year deprecation period. So because the release was never completed, I think this is okay -- we've decided 11.2.0 never existed. If we'd left 11.2.0 as yanked, I would have still wanted to respect out deprecation period. A case where you may want to yank without deleting: a release was made successfully. But then you discover some ugly bug and fix it. You can then yank the old one, so it doesn't install "normally", but also doesn't break people who have pinned it in their lockfiles. They can upgrade with care as normal for the new release. |
imo:
is exactly what happened here with:
(I'm here during a failing production deployment after we ran 11.2.0 through test environments no problem.) An inadvertent breaking change is a bug, a bugfix is a patch release, doing that in 11.2.1 with the known bug in 11.2.0 is absolutely fine and normal as far as I'm concerned, and would've not caused us a problem (whereas this procedure did). |
Thanks for letting us know! We were in the situation where 11.2.0 hadn't been fully released and we were unable to complete the release at the time. The source and many wheels were missing from PyPI, and we hadn't pushed the tags here. And then we decided to remove features from planned-11.2.0, so it wasn't a bugfix, but feature removal without deprecation. I don't think that would be appropriate in a normal patch release. I'm curious, do you know how you managed to pick up 11.2.0 in the first place? (It was partially released and un-yanked for about 18 hours.) |
From a Dependabot PR created 1 April 23:18 GMT. (I'd link but private repo.) |
Got it, so the Dependabot update passed with 11.2.0 during the window, was merged, the yank also didn't cause problems because it was still pinned, but then the delete broke things. I do hope we won't have to delete, or yank, anything in the future, but won't do so without careful consideration. Thanks again! |
Main Release
Released quarterly on January 2nd, April 1st, July 1st and October 15th.
main
branch.main
branch.src/PIL/_version.py
make release-test
in a freshly cloned repo..dev0
to version identifier insrc/PIL/_version.py
and then:Publicize Release
Documentation
Docker Images
git clone https://github.com/python-pillow/docker-images cd docker-images ./update-pillow-tag.sh [[release tag]]
The text was updated successfully, but these errors were encountered: