- PyO3 Rust created upgraded from 0.24 to 0.25. (#273)
- We now use
Py_REFCNT(obj)
instead of accessing(*obj)->ob_refcnt
directly.
This fixes a nogil / multi-threaded compile error. (#201, #275) - A zstandard commit to fix qsort detection on BSD operating systems
has been backported. (#272) - The
PYTHON_ZSTANDARD_IMPORT_POLICY
environment variable now has leading
and trailing whitespace stripped. Values likecffi
andcffi
are
now equivalent tocffi
. - The CI jobs for building wheels have been overhauled to always use
cibuildwheel
anduv
(where possible). This change should be backwards
compatible. But wheel building for this project has historically been
fragile and there may be unwanted changes. We're optimistic that standardizing
on uv (except for musllinux ppc64le and s390x where uv isn't available)
will lead to more stability over time. - CI now runs tests against the wheels we distribute. Previously, we ran
tests against a separate build that was theoretically identical. But the
builds may have been subtly different, leading to preventable bugs in our
wheels. (Enabling this test coverage did not uncover any failures.) - The
pyproject.toml
build backend has been switched from
setuptools.build_meta:__legacy__
tosetuptools.build_meta
. - The setuptools build dependency has been upgraded from <69.0.0 to >=77.0.0.
Modern versions of setuptools broke
--config-settings=--build-option=...
as part of implementing PEP 660.
A workaround is to use--config-settings=--global-option=...
instead.
--global-option
apparently is deprecated and the setuptools folks have yet
to figure out how to thread config settings intosetup.py
invocations.
(--build-option
is sent to thebuild_wheel
command but not the
build_editable
command.) - Python 3.14 wheels are now built with
manylinux_2_28
(versus
manylinux2014
) for older Python versions. This may raise the minimum
glibc version, effectively dropping support for Debian 8 and 9, Ubuntu
13.10 through 18.04, Fedora 19 to 28, and RHEL/Centos 7. However, in
practice most platforms don't container newer glibc symbols and are still
ABI compatible withmanylinux2014
and glibc 2.17. - We now require cffi >= 2.0.0b on Python 3.14. <3.14 still requires 1.17.
(#274) - The cffi backend is now automatically disabled for free-threaded builds
on Python <3.14, as cffi didn't implement free-threaded support until
the 2.0 release. (#274) - Added CI coverage for free-threaded CPython 3.13 and 3.14. We do not yet
formally support free-threaded builds. (#276) - The C and Rust backends now declare the GIL as unused.
- The
pythoncapi_compat.h
file has been upgraded to the latest version. (#278) setup.py
now depends onpackaging
and usespackaging.version.Version
for version comparisons. This removes some deprecation warnings from usage of
legacy distutilsVersion
classes.- Relax run-time libzstd version checking in C extension from exactly 1.5.7
to >=1.5.6. (#254, #267) - C extension types now (correctly) declare their fully qualified type names
aszstandard.backend_c.*
versuszstd.*
before. The names have been
subtly broken for years. We believe the only practical exposure to this change
is via pickling (possibly encountered when using themultiprocessing
or
concurrent.futures
packages), which would fail to pickle types like
ZstdError
before since the fully qualified type name referenced an
incorrect and likely missing package (zstd
). (#248)