{"record":{"id":"a9101c6d311a6892","repo":"dbt-labs/dbt-core","slug":"no-prebuilt-name-ver-wheel-for-this-platform","errorCode":null,"errorMessage":"no prebuilt {name} {ver} wheel for this platform; available platforms: {plats}","messagePattern":"no prebuilt (.+?) (.+?) wheel for this platform; available platforms: (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"crates/dbt-ci/templates/sdist_build_backend.py","lineNumber":38,"sourceCode":"_HERE = Path(__file__).resolve().parent\n_MANIFEST = json.loads((_HERE / \"assets.json\").read_text(encoding=\"utf-8\"))\n\n_RETRIES = 4\n_TIMEOUT = 60\n\n\ndef _select_wheel():\n    \"\"\"Pick the manifest wheel for the first platform tag this machine accepts.\n\n    ``sys_tags()`` is pip's ordered list of compatible tags, so the most specific\n    build wins.\n    \"\"\"\n    wheels = _MANIFEST[\"wheels\"]\n    for tag in sys_tags():\n        entry = wheels.get(tag.platform)\n        if entry is not None:\n            return entry\n    raise RuntimeError(\n        \"no prebuilt {name} {ver} wheel for this platform; \"\n        \"available platforms: {plats}\".format(\n            name=_MANIFEST[\"name\"],\n            ver=_MANIFEST[\"version\"],\n            plats=\", \".join(sorted(wheels)),\n        )\n    )\n\n\ndef _emit_notice():\n    \"\"\"Print the manifest's install-time notice, if it carries one.\n\n    pip and uv run the build backend as a subprocess and only surface its output\n    when the build *fails*, so stderr alone would hide this from a normal\n    install. Writing to the controlling terminal as well is best-effort: with no\n    tty (CI, redirected output, Windows with no console) it just falls through to\n    stderr, where `-v` and the pip log still pick it up. Both land under `-v`,\n    which is better than the notice going unseen.","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-ci/templates/sdist_build_backend.py#L20-L56","documentation":"The PEP 517 build backend's `_select_wheel` iterates pip's compatible platform tags (`sys_tags()`) looking for a match in the sdist's embedded `assets.json` manifest. If none of the machine's platform tags appears in the manifest's `wheels` map, it concludes no prebuilt wheel was published for this platform and raises RuntimeError listing which platforms ARE available.","triggerScenarios":"`pip install` of the sdist runs `build_wheel`, which calls `_select_wheel`; the current OS/arch (or Python ABI implied by the tags) has no entry in the manifest's `wheels` mapping.","commonSituations":"Installing on an unsupported platform (e.g. Alpine/musl, FreeBSD, linux armv7) or a very new OS/arch released after the wheels were published; a partial release where the pack tool only published wheels for some platforms; mixing up platform tag naming between manifest generation and install-time.","solutions":["Check the error's 'available platforms' list against your platform; if supported, upgrade pip to ensure correct platform tagging","Pin to a release version that includes wheels for your platform","Build/install from source or use a platform whose tag matches a listed wheel","Regenerate/publish wheels for the missing platform with `dbt-ci pypi pack`"],"exampleFix":"// before (unsupported platform)\npip install mypkg  # musl container\n// after\nFROM gcr.io/...:manylinux  # or pin a release with musl wheels\npip install mypkg==1.2.3","handlingStrategy":"validation","validationCode":"import json, pathlib\nmanifest = json.loads(pathlib.Path('assets.json').read_text())\nfrom packaging.tags import sys_tags\ncompatible = [t.platform for t in sys_tags() if t.platform in manifest['wheels']]\nif not compatible:\n    print('unsupported platform; available:', sorted(manifest['wheels']))","typeGuard":"def has_prebuilt_wheel(manifest: dict) -> bool:\n    from packaging.tags import sys_tags\n    wheels = manifest.get(\"wheels\", {})\n    return any(t.platform in wheels for t in sys_tags())","tryCatchPattern":"try:\n    entry = _select_wheel()\nexcept RuntimeError as e:\n    print(f\"no wheel for this platform: {e}\")\n    sys.exit(1)  # or fall back to source build","preventionTips":["Check the release's supported platforms list before installing on exotic OS/arch combos","Keep pip current so platform tags are accurate","Prefer manylinux/macOS/Windows mainstream platforms or pin a release with wheels for yours","If you control the release, publish wheels for every platform you claim to support"],"tags":["pip","packaging","platform-compatibility","wheel"],"backgroundTag":"unsupported-platform","analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}