Hi, thanks for adding abi3t support in #1269.
I searched existing issues before opening this. I found:
I did not find an existing scikit-build-core issue for the specific behavior below.
Reproducer
I tested scikit-build-core main at commit e4fe16c5a1206bd025424c195f7c383da6264080 on CPython 3.15.0b3 free-threaded:
scikit-build-core 0.12.3.dev89+ge4fe16c5a
cmake 4.3.4
pip 26.1.2
packaging 26.2
Python 3.15.0b3 free-threading build
Build command:
python -m pip wheel . -w /tmp/wheelhouse --no-deps --no-build-isolation \
--config-settings=wheel.py-api=cp315t \
--config-settings=cmake.args="-DAISCAT_ABI3T=ON;-DCMAKE_BUILD_TYPE=Release"
Generated wheel:
aiscat-0.68.14-cp315t-abi3t-linux_x86_64.whl
Tag: cp315t-abi3t-linux_x86_64
contains: aiscat/_core.abi3t.so
Install result on the same interpreter:
ERROR: aiscat-0.68.14-cp315t-abi3t-linux_x86_64.whl is not a supported wheel on this platform.
On that interpreter, packaging.tags.sys_tags() includes cp315-abi3t-* tags, but does not include cp315t-abi3t-*.
Tag compatibility question
As I understand PEP 803 and the current pip/packaging behavior, installer-compatible abi3t wheel tags use a GIL-independent Python tag such as cp315, with the free-threaded stable ABI represented in the ABI tag:
cp315-abi3t-*
cp315-abi3.abi3t-*
Current pip/packaging does not accept:
So this may be a mismatch between scikit-build-core's current interpretation of wheel.py-api=cp315t and the PEP 803 / installer-compatible wheel tag set.
Why this looks like a release blocker
scikit-build-core main currently documents wheel.py-api=cp315t and its tests appear to expect cp315t-abi3t-*:
tags = WheelTag.compute_best(["x86_64"], py_api="cp315t")
assert str(tags) == "cp315t-abi3t-macosx_10_10_x86_64"
But current pip/packaging does not consider that tag compatible. This means projects cannot install the produced wheel without retagging it.
For comparison, when I retagged the same wheel to a pip-compatible abi3t tag, the extension installed and ran correctly; the contained extension was already aiscat/_core.abi3t.so.
The C extension side appears to be past the relevant CPython 3.15 C API pieces: the extension uses the PEP 793/803-style module export path (PyModExport__core, Py_mod_abi, Py_MOD_GIL_NOT_USED) and produces an .abi3t.so. The remaining issue appears to be the wheel tag, not the compiled extension.
Could you confirm whether scikit-build-core should keep cp315t only as the user-facing build selector, but emit an installer-compatible wheel tag such as cp315-abi3t-* or cp315-abi3.abi3t-*? Or is cp315t-abi3t-* intended to become accepted by packaging/pip later?
Once the emitted tag is aligned with installers, it would be very helpful to publish a new PyPI release so projects can test abi3t wheels without depending on a git checkout or manual retagging.
Hi, thanks for adding abi3t support in #1269.
I searched existing issues before opening this. I found:
cp315-abi3.abi3twheels neutrinoceros/rlic#436 and Upload cp314t and eventually abi3.abi3t wheels pola-rs/polars#27955I did not find an existing scikit-build-core issue for the specific behavior below.
Reproducer
I tested scikit-build-core
mainat commite4fe16c5a1206bd025424c195f7c383da6264080on CPython 3.15.0b3 free-threaded:Build command:
Generated wheel:
Install result on the same interpreter:
On that interpreter,
packaging.tags.sys_tags()includescp315-abi3t-*tags, but does not includecp315t-abi3t-*.Tag compatibility question
As I understand PEP 803 and the current pip/packaging behavior, installer-compatible abi3t wheel tags use a GIL-independent Python tag such as
cp315, with the free-threaded stable ABI represented in the ABI tag:Current pip/packaging does not accept:
So this may be a mismatch between scikit-build-core's current interpretation of
wheel.py-api=cp315tand the PEP 803 / installer-compatible wheel tag set.Why this looks like a release blocker
scikit-build-core main currently documents
wheel.py-api=cp315tand its tests appear to expectcp315t-abi3t-*:But current pip/packaging does not consider that tag compatible. This means projects cannot install the produced wheel without retagging it.
For comparison, when I retagged the same wheel to a pip-compatible abi3t tag, the extension installed and ran correctly; the contained extension was already
aiscat/_core.abi3t.so.The C extension side appears to be past the relevant CPython 3.15 C API pieces: the extension uses the PEP 793/803-style module export path (
PyModExport__core,Py_mod_abi,Py_MOD_GIL_NOT_USED) and produces an.abi3t.so. The remaining issue appears to be the wheel tag, not the compiled extension.Could you confirm whether scikit-build-core should keep
cp315tonly as the user-facing build selector, but emit an installer-compatible wheel tag such ascp315-abi3t-*orcp315-abi3.abi3t-*? Or iscp315t-abi3t-*intended to become accepted by packaging/pip later?Once the emitted tag is aligned with installers, it would be very helpful to publish a new PyPI release so projects can test abi3t wheels without depending on a git checkout or manual retagging.