Skip to content

PyPI wheels are cp311-only, no macOS Intel/Windows ARM — blocks broader Python compat despite requires-python >=3.11 #611

Description

@randlee

Problem

sc-compose (and likely sc-composer-beads) publish PyPI wheels tagged cp311-cp311 — built against CPython 3.11's specific (non-stable) ABI, not the stable abi3 ABI. requires-python = ">=3.11" in bindings/python/pyproject.toml implies broader compatibility, but no wheel actually resolves for 3.12+.

Verified directly against the published 1.6.1 release:

$ pip download sc-compose==1.6.1 --python-version 3.14 --only-binary=:all:
ERROR: Could not find a version that satisfies the requirement sc-compose==1.6.1 (from versions: none)
ERROR: No matching distribution found for sc-compose==1.6.1

Published wheel set for 1.6.1:

sc_compose-1.6.1-cp311-cp311-macosx_11_0_arm64.whl
sc_compose-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
sc_compose-1.6.1-cp311-cp311-manylinux_2_34_x86_64.whl
sc_compose-1.6.1-cp311-cp311-win_amd64.whl
sc_compose-1.6.1.tar.gz

Gaps:

  1. No forward compatibility past 3.11. Wheels are per-exact-interpreter (cp311-cp311), not abi3, so 3.12/3.13/3.14 users get no wheel and must build from the sdist — which requires a Rust toolchain locally. On a machine without Rust, pip install sc-compose fails outright for any Python != 3.11.
  2. No macOS x86_64 (Intel) wheel.
  3. No Windows ARM64 wheel.

Root cause

bindings/python/Cargo.toml (and bindings/sc-composer-beads-python/Cargo.toml) declare:

[dependencies]
pyo3 = "0.29"
[features]
python-extension = ["pyo3/extension-module"]

No abi3-pyXXX feature is enabled, so maturin builds a version-specific wheel instead of a stable-ABI one.

The release matrix in release/publish-artifacts.toml for sc-compose is:

wheels = ["ubuntu-latest", "ubuntu-24.04-arm", "macos-latest", "windows-latest"]

macos-latest is an arm64 (Apple Silicon) runner, and there's no Windows ARM64 or Intel macOS entry.

Proposed fix

  1. Add an abi3-py311 feature to the pyo3 dependency in bindings/python/Cargo.toml (and bindings/sc-composer-beads-python/Cargo.toml if the same policy should apply there), e.g.:
    pyo3 = { version = "0.29", features = ["abi3-py311"] }
    This makes maturin emit cp311-abi3-<platform> wheels that install on any CPython >= 3.11 without a rebuild per minor version — matching what requires-python = ">=3.11" already claims.
  2. Broaden the wheels matrix in release/publish-artifacts.toml for the sc-compose (and sc-composer-beads) [[python_distributions]] entries to add:
    • macOS x86_64 (Intel) — e.g. macos-13 runner
    • Windows ARM64 — e.g. windows-11-arm runner

Motivation

Found while evaluating sc-compose as a dependency for sc-install in synaptic-canvas (using it to render .local.j2 template artifacts at install time). A hard dependency on sc-compose isn't viable for sc-install users until it reliably installs via wheel across the platforms/Python versions sc-install itself supports.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions