Skip to content
Latchkey

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.

cibuildwheel
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

  1. List valid identifiers and confirm your glob matches some.
  2. Set CIBW_BUILD to real targets like cp311-*.
  3. Loosen CIBW_SKIP so it does not cancel everything.
.github/workflows/ci.yml
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.

Terminal
cibuildwheel --print-build-identifiers

How to prevent it

  • Validate CIBW_BUILD/CIBW_SKIP with --print-build-identifiers.
  • Avoid globs that can match nothing across the platform matrix.
  • Assert that wheel artifacts are non-empty before publishing.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →