007-python-distribution

Distribution: uvx/PyPI wheel shim

Lifecycle approvedImplementation completeVerification unknownQualification unknown

The Python parallel of 006's npm shim: a uvx/PyPI channel so a Python or polyglot team can `uvx spec-spine ...` (or `uv tool install spec-spine`) and get the CLI with no Rust toolchain. Where npm uses a main launcher package + five os/cpu-gated platform packages, Python collapses the same idea into one PyPI project + five per-platform wheels (+ one sdist): the wheel platform tag IS the selector, and the prebuilt binary ships in the wheel's data/scripts dir so pip/uv place it directly on PATH. There is no Python in the run path, no postinstall, no network at install, and no archive extraction at install: it works offline and under --no-build-isolation. Unsupported hosts (musl/Alpine, win-arm64, 32-bit) match no wheel and fall to the sdist, whose only artifact is a `spec-spine` console entry point that names the host and points at `cargo install spec-spine-cli` -- exact parity with 006 §3.4. Wheels are assembled from the same release archives the build job already produces (no second Rust build), are byte-reproducible, and are version-locked to the tag.

Read the full pinned specification ↗

Relationships

Claimed units

  • establishes
    {
      "kind": "file",
      "path": "py/"
    }
  • establishes
    {
      "kind": "file",
      "path": "py/scripts/generate_wheels.py"
    }
  • extends
    {
      "nature": "additive",
      "spec": "006-distribution",
      "unit": {
        "kind": "file",
        "path": ".github/workflows/release.yml"
      }
    }

Source headings

  1. 007: Distribution, uvx/PyPI wheel shim
  2. 1. Purpose
  3. 2. Territory
  4. 3. Behavior
  5. 3.1 The pattern: per-platform wheels, not download-on-first-use
  6. 3.2 Platform map (the same five triples)
  7. 3.3 The launcher (there isn't one)
  8. 3.4 Unsupported hosts fail clearly
  9. 3.5 Version lock
  10. 3.6 Release integration
  11. 4. Out of scope
  12. Release log

Frozen anchors

No frozen anchors declared.