runanywhere ships as a pybind11 native wheel (the _core extension over the rac_* C ABI)
plus a pure-Python facade. Because the wheel carries a compiled extension + vendored sidecar libs
(onnxruntime/sherpa), there is one wheel per platform + Python version — there is no universal
wheel. The sdist is source-only.
| Artifact | Built by | Repaired by | Sidecar location |
|---|---|---|---|
runanywhere-*-win_amd64.whl |
scikit-build-core | delvewheel |
runanywhere.libs/ |
runanywhere-*-manylinux_2_35_x86_64.whl |
scikit-build-core | auditwheel |
runanywhere.libs/ |
runanywhere-*-macosx_*_arm64.whl |
scikit-build-core | delocate |
runanywhere/.dylibs/ |
runanywhere-*.tar.gz (sdist) |
scikit-build-core | — | source only (no binaries) |
CI (.github/workflows/pr-build.yml) already builds + repairs + validates + hermetic-tests the
wheel on python-windows and python-macos for PR validation only. release.yml does not build
or collect Python wheels, so the checklist below has to produce every wheel itself.
python-linux was removed in #757, so the manylinux wheel above is not built by CI today.
- Version — bump
core/VERSION;scripts/release/sync-versions.shpropagates it intopyproject.toml. Confirmpip show/__version__match. - Build sdist —
python -m build --sdist -o dist. - Build + repair each wheel on its platform (Win/Linux/macOS) (build →
delvewheel/auditwheel/delocate). Windows and macOS can follow the
python-windows/python-macosjobs inpr-build.yml; since #757 removedpython-linuxthere is no CI recipe left to copy for the manylinux wheel, so it has to be built andauditwheel-repaired by hand. - Validate the release boundary —
python scripts/validate_public_packages.py --dist dist --expected-version <VERSION>(asserts:_core+ sidecar libs present in the right dir per platform, no host-path leaks in text/metadata members, the sdist has sources only, version matches). twine check dist/*— long-description + metadata render.- Fresh-venv install of each wheel and smoke it:
- base:
pip install <wheel>→import runanywhere(no fastapi/protobuf),runanywhere version,runanywhere models. - server:
pip install "<wheel>[server]"→runanywhere serveboots;import runanywherestill pulls in no fastapi. - rag:
pip install "<wheel>[rag]"→from runanywhere.rag import RagSessionimports.
- base:
- TestPyPI first —
twine upload --repository testpypi dist/*, thenpip install -i https://test.pypi.org/simple/ runanywherein a clean venv and re-run the smoke. - Upload —
twine upload dist/*.
- The base install is intentionally lean (
numpy+ stdlib only).fastapi/uvicornlive under the[server]extra;protobufunder[rag]. sdist.includescopes the sdist torunanywhere/+native/so it stays a few MB (not the whole monorepo).- CUDA / QHexRT are build-flag opt-ins (
-C cmake.define.RAC_GPU_CUDA=ON, etc.) producing separate distributions — not part of the default PyPI wheel.