cibuildwheel (original) (raw)

Python wheels are great. Building them across Mac, Linux, Windows, on multiple versions of Python, is not.

cibuildwheel is here to help. cibuildwheel runs on your CI server - currently it supports GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, and GitLab CI - and it builds and tests your wheels across all of your platforms.

What does it do?

While cibuildwheel itself requires a recent Python version to run (we support the last three releases), it can target the following versions to build wheels:

macOS Intel macOS Apple Silicon Windows 64bit Windows 32bit Windows Arm64 manylinuxmusllinux x86_64 manylinuxmusllinux i686 manylinuxmusllinux aarch64 manylinuxmusllinux ppc64le manylinuxmusllinux s390x manylinuxmusllinux armv7l Pyodide
CPython 3.6 N/A N/A ✅⁵ N/A
CPython 3.7 N/A N/A ✅⁵ N/A
CPython 3.8 N/A ✅⁵ N/A
CPython 3.9 ✅² ✅⁵ N/A
CPython 3.10 ✅² ✅⁵ N/A
CPython 3.11 ✅² ✅⁵ N/A
CPython 3.12 ✅² ✅⁵ ✅⁴
CPython 3.13³ ✅² ✅⁵ N/A
PyPy 3.7 v7.3 N/A N/A N/A ✅¹ ✅¹ ✅¹ N/A N/A N/A N/A
PyPy 3.8 v7.3 N/A N/A ✅¹ ✅¹ ✅¹ N/A N/A N/A N/A
PyPy 3.9 v7.3 N/A N/A ✅¹ ✅¹ ✅¹ N/A N/A N/A N/A
PyPy 3.10 v7.3 N/A N/A ✅¹ ✅¹ ✅¹ N/A N/A N/A N/A
PyPy 3.11 v7.3 N/A N/A ✅¹ ✅¹ ✅¹ N/A N/A N/A N/A

¹ PyPy is only supported for manylinux wheels.
² Windows arm64 support is experimental.
³ Free-threaded mode requires opt-in using CIBW_FREE_THREADED_SUPPORT.
⁴ Experimental, not yet supported on PyPI, but can be used directly in web deployment. Use --platform pyodide to build.
⁵ manylinux armv7l support is experimental. As there are no RHEL based image for this architecture, it's using an Ubuntu based image instead.

See the cibuildwheel 1 documentation if you need to build unsupported versions of Python, such as Python 2.

Usage

cibuildwheel runs inside a CI service. Supported platforms depend on which service you're using:

Linux macOS Windows Linux ARM macOS ARM Windows ARM
GitHub Actions ✅²
Azure Pipelines ✅²
Travis CI
AppVeyor ✅²
CircleCI
Gitlab CI ✅¹
Cirrus CI

¹ Requires emulation, distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.
² Uses cross-compilation. It is not possible to test arm64 on this CI platform.

To get started, head over to the setup guide.

How it works

This diagram summarises the steps that cibuildwheel takes on each platform to build your package's wheels.

Linux

macOS

Windows

For each version of Python

This isn't exhaustive, for a full list of the things cibuildwheel can do, check the options page.