openslide / openslide-bin

Binary builds of OpenSlide and its dependencies
https://openslide.org/download/#binaries
GNU Lesser General Public License v2.1
19 stars 28 forks source link

Build Python wheels, upload to PyPI #232

Closed bgilbert closed 8 months ago

bgilbert commented 8 months ago

Generate wheels for an openslide-bin Python package, containing the OpenSlide shared object and an __init__.py that loads it with ctypes. OpenSlide Python can look for this package and use its shared object rather than requiring OpenSlide to be installed directly on the system.

Hand-roll the wheels rather than building them with an existing tool like meson-python. Existing Python build tools expect to be in control of the entire build process, but we want to produce the wheel as a side effect of an existing build. Our needs are simple, so just implement the underlying packaging specs directly.

Add Python source distribution metadata to the source tarball, but don't allow building via PEP 517. We want to upload the source tarball to PyPI so the complete corresponding source is available alongside the wheels, but it's infeasible to support PEP 517 source builds with our highly customized build process. In practice, pip install will only try to do source builds on platforms where a wheel isn't available. Configure PEP 517 builds to use meson-python, then have meson-python fail with an error encouraging users to install OpenSlide from source.

Have CI automatically publish the source tarball and wheels to PyPI at release time, via PyPI's trusted publisher mechanism, after manual approval. Have CI verify that the source tarball doesn't exceed PyPI's default 100 MiB limit.

Closes https://github.com/openslide/openslide-bin/issues/160.

openslide-bot commented 8 months ago

DCO signed off :heavy_check_mark:

All commits have been signed off. You have certified to the terms of the Developer Certificate of Origin, version 1.1. In particular, you certify that this contribution has not been developed using information obtained under a non-disclosure agreement or other license terms that forbid you from contributing it under the GNU Lesser General Public License, version 2.1.