Skip to content

win32 wheels missing on PyPI #7443

Description

@bparzella

Since version 10.0.0 there are no wheels for 32-bit version of Windows present on pypi. Version 9.5.0 still had 32-bit wheels.

Pillow 9.5.0 vs Pillow 10.0.1 (search for win32)

We still use 32-bit Python on Windows (64-bit), as some old COM components (32-bit) require the use of the matching Python. They can't be called from a 64-bit Python.

Activity

  1. homm commented on Oct 5, 2023

    @homm
    Member

    Version 9.5.0 still had 32-bit wheels

  2. bparzella commented on Oct 5, 2023

    @bparzella
    Author

    So this is intended?

    In contrast to linux, the 32-bit version of Python is still used on Windows due to compatibility. And Python still provides 32-bit Windows releases, even for 3.12.0 there is one: https://www.python.org/downloads/release/python-3120/

  3. hugovk commented on Oct 5, 2023

    @hugovk
    Member

    Yes, this is intended, see the 10.0.0 release notes and #6941.

  4. radarhere commented on Oct 5, 2023

    @radarhere
    Member

    Pillow should still work on 32-bit, you just have to build it from source yourself. See https://pillow.readthedocs.io/en/stable/installation.html#building-from-source for more information.

  5. changed the title [-]win32 wheels missing on pypi[/-] [+]win32 wheels missing on PyPI[/+] on Oct 5, 2023
  6. bparzella commented on Oct 5, 2023

    @bparzella
    Author

    While I completely understand the decision for Linux with below 0.1% of installs, Windows is quite different. More than 9000 installs in 7 days is a big number.

    In the discussion mentioned in issue 6941 a pyca/cryptography developer even notes the difference between Linux and Windows: https://discuss.python.org/t/dropping-32-bit-packages/5476/17

    The problem is, while I would love to switch to 64-bit on Windows, one of the legacy systems (Simatic SDK) can only be automated using a win32 COM library which can only be imported using 32-bit Python. And this is not something that can be changed with a few hours of coding, because there is no 64-bit alternative.
    In my time as a freelancer I've seen quite a few of this kind of legacy system on Windows, so I don't think this is an unusual setting. My guess is, that this is the reason python still provides win32 binaries.

    Building from source is also quite different on Windows, as you manually need to install a C++ compiler and all the required libraries on all nodes. Windows doesn't have a builtin state-of-the-art package manager like apt.

    See also:
    https://discuss.python.org/t/consider-downgrading-windows-32-bit-from-tier-1-to-tier-2-or-tier-3-in-python-3-13/33719/9
    https://discuss.python.org/t/consider-downgrading-windows-32-bit-from-tier-1-to-tier-2-or-tier-3-in-python-3-13/33719/21

  7. hugovk commented on Oct 5, 2023

    @hugovk
    Member

    More than 9000 installs in 7 days is a big number.

    I'm not sure, we don't know where these installs are coming from, I suspect a lot are from CI. It's dwarfed by the more than 7.3 million installs for everything else.

    Getting fresh numbers via pypinfo --days 7 --limit 100 pillow==9.5.0 file > 1000-9.5.0.txt && grep win32*.whl:

    file download_count
    Pillow-9.5.0-cp37-cp37m-win32.whl 5,980
    Pillow-9.5.0-cp38-cp38-win32.whl 1,377
    Pillow-9.5.0-cp311-cp311-win32.whl 1,303
    Pillow-9.5.0-cp310-cp310-win32.whl 764
    Pillow-9.5.0-cp39-cp39-win32.whl 656
    Pillow-9.5.0-cp312-cp312-win32.whl 56

    And we can forget EOL 3.7, bringing it down to ~4k.

    Comparing with the other Windows wheels for the latest 10.0.1 (via pypinfo --days 7 --limit 100 pillow==10.0.1 file), the 32-bit proportion is now even lower (before 0.90% - 5.63%, now 0.6%-2.34% and 0.85% overall):

    file download_count percentage
    Pillow-10.0.1-cp312-cp312-win_amd64.whl 9,211 99.40 %
    Pillow-9.5.0-cp312-cp312-win32.whl 56 0.60 %
    total 9,267  
         
    Pillow-10.0.1-cp311-cp311-win_amd64.whl 184,474 99.30 %
    Pillow-9.5.0-cp311-cp311-win32.whl 1,303 0.70 %
     total 185,777  
         
    Pillow-10.0.1-cp310-cp310-win_amd64.whl 150,020 99.49 %
    Pillow-9.5.0-cp310-cp310-win32.whl 764 0.51 %
     total 150,784  
         
    Pillow-10.0.1-cp39-cp39-win_amd64.whl 80,764 99.49 %
    Pillow-9.5.0-cp39-cp39-win32.whl 656 0.51 %
     total 656  
         
    Pillow-10.0.1-cp38-cp38-win_amd64.whl 57,497 97.66 %
    Pillow-9.5.0-cp38-cp38-win32.whl 1,377 2.34 %
     total 58,874  
         
    Pillow-10.0.1-*-win_amd64.whl 481,966 99.15 %
    Pillow-9.5.0-*-win32.whl 4,156 0.85 %
     total 486,122  
  8. aclark4life commented on Oct 7, 2023

    @aclark4life
    Member

    Looks like we need to fix the basic installation section of the docs that refers to 32-bit ? https://pillow.readthedocs.io/en/stable/installation.html#basic-installation

    E.g.

    From

    We provide Pillow binaries for Windows compiled for the matrix of supported Pythons in both 32 and 64-bit versions in the wheel format. These binaries include support for all optional libraries except libimagequant and libxcb. Raqm support requires FriBiDi to be installed separately:

    To

    We provide 64-bit Pillow wheels for Windows for supported Python versions. 32-bit Pillow wheels are no longer provided as of Pillow version 9.5.0. These wheels include support for all optional libraries except libimagequant and libxcb. Raqm support requires FriBiDi to be installed separately:

  9. radarhere commented on Oct 7, 2023

    @radarhere
    Member
  10. aclark4life commented on Oct 7, 2023

    @aclark4life
    Member
  11. radarhere commented on Oct 8, 2023

    @radarhere
    Member

    Building from source is also quite different on Windows, as you manually need to install a C++ compiler and all the required libraries on all nodes. Windows doesn't have a builtin state-of-the-art package manager like apt.

    As per the instructions, the https://github.com/python-pillow/Pillow/tree/main/winbuild scripts should help with this.

    If you would like something even simpler, you could take advantage of the fact that we use CI jobs to create our wheels. A simple modification to change the architecture (and drop PyPy), and an artifact is uploaded to https://github.com/radarhere/Pillow/actions/runs/6445067119 with 32-bit Windows wheels inside.

  12. bparzella commented on Oct 10, 2023

    @bparzella
    Author

    As per the instructions, the https://github.com/python-pillow/Pillow/tree/main/winbuild scripts should help with this.

    If you would like something even simpler, you could take advantage of the fact that we use CI jobs to create our wheels. A simple modification to change the architecture (and drop PyPy), and an artifact is uploaded to https://github.com/radarhere/Pillow/actions/runs/6445067119 with 32-bit Windows wheels inside.

    The problem is that our infrastructure doesn't base on Github Actions but Gitlab CI and/or Jenkins. So these CI jobs are not applicable for us.
    And the instructions are quite extensive, nothing we can do every time we want to just install the package in a Jenkins job.

    I think the main problems will arise, when other packages that have Pillow as dependency, raise their minimum requirement to >=10.0.0. Then the intermediate package can't be updated to the latest version. And if that latest version includes security patches, it basically renders the intermediate package unusable, on a fully supported python version. This might even result in developers not being able to use a supported python version (in about 4 years, when support for python 3.11 ends).

    What is the reason for the ending support for 32 bit Windows platform? Is the maintenance required for it so time consuming? Usually building for 32 bit Windows is not that different than for 64 bit Windows.

  13. aclark4life commented on Oct 10, 2023

    @aclark4life
    Member

    Agree the documentation is a bit light here too: https://pillow.readthedocs.io/en/stable/releasenotes/10.0.0.html#bit-wheels. I'd expect to see an issue referenced, or explanation given. Something more than "no longer provided" with the tacit assumption everyone is aware "the passage of time erases all things" should be provided 😄 If I recall correctly, it may have been that @hugovk noticed no one was downloading them anymore.

  14. radarhere commented on Oct 10, 2023

    @radarhere
    Member
  15. aclark4life commented on Oct 10, 2023

    @aclark4life
    Member

    I haven't put a lot of thought into this but, at a glance, it looks like M$ will support Windows 10 (the last of their 32-bit operating systems) until 2025 and so we may want to consider re-adding 32-bit wheels until then. Given this is the case, we may expect a lot of questions about 32-bit installation failures. It also seems likely there will come a time when this matters a lot less, but perhaps today is not that day. With the next release due, this may be a good time to decide one way or another. 🤷

  16. nulano commented on Nov 27, 2023

    @nulano
    Contributor

    There have been several issues opened about this: #7251, #7341, #7393, #7454, #7569, #7573, #7614, and a related issue #7265.
    I think it may be worth re-adding 32-bit wheels at least to minimize the number of duplicate issues created about this, so I've included 32-bit wheels in #7580 for now.

  17. aclark4life commented on Nov 27, 2023

    @aclark4life
    Member

    Thanks @nulano , agree

  18. radarhere commented on Nov 30, 2023

    @radarhere
    Member

    #7580 has been merged, so Windows 32-bit wheels should be available again when Pillow 10.2.0 is released on January 2.

  19. radarhere commented on Jan 2, 2024

    @radarhere
    Member

    Pillow 10.2.0 has been released with Windows 32-bit wheels.

  20. aclark4life commented on Jan 2, 2024

    @aclark4life
    Member

    Woo hoo!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions