cibuildwheel "No build identifiers selected" in CI
cibuildwheel expands a matrix of build identifiers (Python version x platform) and applies CIBW_BUILD/CIBW_SKIP. If the selector matches no identifier, or skip removes them all, it exits reporting that no builds were selected and produces zero wheels.
What this error means
cibuildwheel ends with "No build identifiers selected" or a job that produces no wheel artifacts, often after a too-narrow CIBW_BUILD glob.
Error: No build identifiers selected: BuildSelector(build_config='cp99-*', skip_config='')Common causes
CIBW_BUILD glob matches nothing
A pattern like cp99-* or a typo in the identifier matches no real Python/platform, so the selection is empty.
CIBW_SKIP removes every candidate
An over-broad skip pattern can eliminate all identifiers that CIBW_BUILD would have built.
How to fix it
Use real build identifiers
- List valid identifiers and confirm your glob matches some.
- Set
CIBW_BUILDto real targets likecp311-*. - Loosen
CIBW_SKIPso it does not cancel everything.
env:
CIBW_BUILD: "cp310-* cp311-* cp312-*"
CIBW_SKIP: "*-musllinux_i686"Print the selection to debug
Run cibuildwheel with the same env locally and check which identifiers it expands.
cibuildwheel --print-build-identifiersHow to prevent it
- Validate
CIBW_BUILD/CIBW_SKIPwith--print-build-identifiers. - Avoid globs that can match nothing across the platform matrix.
- Assert that wheel artifacts are non-empty before publishing.