Skip to content

Build: CPython 3.15.0 final (python-build-standalone 20261013) - #197

Merged
b-re-w merged 2 commits into
developfrom
feat/python-3.15.0
Oct 15, 2026
Merged

b-re-w merged 2 commits into
developfrom
feat/python-3.15.0

Conversation

@b-re-w

@b-re-w b-re-w commented Oct 15, 2026

Copy link
Copy Markdown
Member

Closes #196

1. Defaults. gradle.properties: pythonVersion 3.14.7 → 3.15.0, pythonBuildStandaloneRelease 20260807 → 20261013. The fallbacks in python-multiplatform/build.gradle.kts (pbsRelease) and python-multiplatform-gradle-plugin/build.gradle.kts (pythonVersion, pythonBuildStandaloneRelease) follow.

2. Checksums. python-checksums.properties adds 11 entries and removes the 10 3.15.0rc1 entries; 3.14.7 stays. Every hash was computed from the downloaded archive:

  • PBS desktop, 8 archives (macOS aarch64/x86_64, Linux x86_64, Windows x86_64; GIL and freethreaded): all match the release's SHA256SUMS.
  • python.org, 3 archives (android aarch64/x86_64, iOS XCframework): all verify against their .sigstore bundles with the identity the build pins (hugo@python.org, https://github.com/login/oauth), using uvx sigstore (nothing linked into ~/.local/bin).

3. rc-era branches, checked by reading, unchanged. For a final release pythonOrgReleaseDir yields 3.15.0, the directory the archives come from; iosFromPythonOrg is true for 3.15. The 3.14 GIL path is untouched. The build itself then downloaded the 3.15.0 archives and passed its own checksum verification.

Vendored headers. VendoredHeaderVersionTest failed once the default was 3.15.0, which is its job. src/nativeInterop/cinterop/include is refreshed from the build's verified 3.15.0 extraction, as 8e40577 did for 3.14.7: 17 added, 8 removed (cpython/lock.h became pylock.h), 138 changed. EmbedApiSurfaceTest and JniCallConventionClassificationTest pass on it, so the C API surface did not move.

5. Verification (local, macOS arm64, JDK 21, each its own invocation, results counted from XML after --rerun):

Task Result
:python-multiplatform:compileKotlinAndroidNativeArm64 EXIT 0
:python-multiplatform:compileKotlinIosSimulatorArm64 EXIT 0
:python-multiplatform:desktopTest 608 tests, 0 failures, 0 errors, 1 skipped (first run 1 failure: the header check, fixed above)
:python-multiplatform-ksp:fixtures:app:desktopTest 79 tests, 0 failures, 0 errors, 4 skipped
:python-multiplatform-compose:fixtures:compose:desktopTest 123 tests, 0 failures, 0 errors, 0 skipped
:python-multiplatform-gradle-plugin-fixtures:artifact:desktopTest 37 tests, 0 failures, 0 errors, 0 skipped

4. WASM (research only, no change). A PEP 783 ABI for 3.15 exists only as a draft:

  • Pyodide's 315.0.0a1 and 315.0.0a2 prereleases (2026-08-04, branch abi_2026_5) define PYODIDE_ABI_VERSION 2026_5, i.e. pyemscripten_2026_5, on CPython 3.15.0rc1 and Emscripten 6.0.5.
  • CPYTHON_ABI_FLAGS is only d: it is a GIL build without pthreads. It doesn't match the free-threaded 3.15t + pthreads WASM decision either.
  • No final 315.0.0 yet; Pyodide's main is still 3.14.2 / 2026_0 (Pyodide RFC #6084: one line per Python minor, "315.0.0 this year").
  • I found no pyemscripten_2026_5 wheels on PyPI for the packages sampled (pydantic-core has 5 for 2026_0; numpy and markupsafe have none for either).
  • Conclusion: our wasm stays on 3.14.2 / pyemscripten_2026_0 until our own 3.15t pthreads build lands (the user's 2026-10-04 decision). Its ABI won't be a Pyodide one either way.

…0261013

- gradle.properties: pythonVersion 3.14.7 -> 3.15.0, pythonBuildStandaloneRelease 20260807 ->
  20261013; the fallback defaults in python-multiplatform and the plugin build follow.
- python-checksums.properties: 3.15.0 for android aarch64/x86_64, ios-3.15.0-pythonorg, and PBS
  20261013 desktop (macOS arm64/x86_64, Linux x86_64, Windows x86_64; GIL and freethreaded). The
  3.15.0rc1 entries are gone; 3.14.7 stays.
- Every SHA-256 was computed from the downloaded archive. The eight PBS archives match the
  release's SHA256SUMS; the three python.org archives verify against their .sigstore bundles
  with the identity the build pins (hugo@python.org, https://github.com/login/oauth).

Refs #196
VendoredHeaderVersionTest failed once the default became 3.15.0: the tree under
src/nativeInterop/cinterop/include, which EmbedApiSurfaceTest and
JniCallConventionClassificationTest read as the C API's source of truth, was still 3.14.7. It is
now mirrored from the build's own checksum-verified extraction
(build/python-standalone/extracted/3.15.0/android-aarch64/prefix/include/python3.15), as
8e40577 did for 3.14.7: 17 headers added, 8 removed (cpython/lock.h became cpython/pylock.h),
138 changed. Both suites pass on the 3.15.0 headers, so the surface did not move.

Refs #196
@b-re-w
b-re-w merged commit ebf3375 into develop Oct 15, 2026
7 checks passed
@b-re-w
b-re-w deleted the feat/python-3.15.0 branch October 15, 2026 12:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant