Skip to content

Commit b35883e

Browse files
authored
GH-48028: [Python][Packaging] Update quay.io base manylinux and musllinux images for Python wheels and remove cp313t (#50082)
### Rationale for this change When adding support to Python 3.14 the musllinux wheels failed with newer versions of the musllinux quay.io image. In order to prepare for the next Python 3.15 release we will require newer base images and we should fix the issues we originally found. ### What changes are included in this PR? - Update Manylinux and Musllinux quay.io images to `2026.05.31-3` - Use mold linker instead of ld on alpine in order to solve import segfault on pyarrow musllinux amd64 - Remove Python 3.13 free-threaded wheels as Python 3.13t is not available anymore on the underlying manylinux image, see: - #50086 ### Are these changes tested? Yes via archery ### Are there any user-facing changes? Yes, Python 3.13 free threaded was experimental, PyPA removed cp313t from the underlying manylinux docker image. We won't support wheels for 3.13 free-threaded anymore. We will support for 3.14 on-wards. * GitHub Issue: #48028 Authored-by: Raúl Cumplido <raulcumplido@gmail.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
1 parent e16067a commit b35883e

15 files changed

Lines changed: 31 additions & 149 deletions

.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,5 @@ VCPKG="9b965a116838c6cdcd36bca60d1b81b030c8ab8d" # 2026.05.27 (not release, u
9898
# ci/docker/python-*-windows-*.dockerfile or the vcpkg config.
9999
# This is a workaround for our CI problem that "archery docker build" doesn't
100100
# use pulled built images in dev/tasks/python-wheels/github.windows.yml.
101-
PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2026-05-27
102-
PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION=2026-05-27
101+
PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2026-06-03
102+
PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION=2026-06-03

ci/docker/linux-apt-python-313-freethreading.dockerfile

Lines changed: 0 additions & 59 deletions
This file was deleted.

ci/docker/python-free-threaded-wheel-manylinux-test-imports.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
ARG base
1919
FROM ${base}
2020

21-
ARG python_version=3.13
21+
ARG python_version=3.14
2222

2323
ENV DEBIAN_FRONTEND=noninteractive
2424

ci/docker/python-free-threaded-wheel-manylinux-test-unittests.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
ARG base
1919
FROM ${base}
2020

21-
ARG python_version=3.13
21+
ARG python_version=3.14
2222

2323
ENV DEBIAN_FRONTEND=noninteractive
2424

ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
ARG base
1919
FROM ${base}
2020

21-
ARG python_version=3.13
21+
ARG python_version=3.14
2222
ARG arch=aarch64
2323
ARG build_date
2424

@@ -35,8 +35,7 @@ RUN apk update && \
3535
# See available releases at: https://github.com/astral-sh/python-build-standalone/releases
3636
RUN set -e; \
3737
case "${python_version}" in \
38-
3.13) python_patch_version="3.13.9";; \
39-
3.14) python_patch_version="3.14.0";; \
38+
3.14) python_patch_version="3.14.5";; \
4039
esac && \
4140
curl -L -o python.tar.zst \
4241
https://github.com/astral-sh/python-build-standalone/releases/download/${build_date}/cpython-${python_patch_version}+${build_date}-${arch}-unknown-linux-musl-freethreaded+lto-full.tar.zst && \

ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
ARG base
1919
FROM ${base}
2020

21-
ARG python_version=3.13
21+
ARG python_version=3.14
2222
ARG arch=aarch64
2323
ARG build_date
2424

@@ -37,8 +37,7 @@ RUN apk update && \
3737
# See available releases at: https://github.com/astral-sh/python-build-standalone/releases
3838
RUN set -e; \
3939
case "${python_version}" in \
40-
3.13) python_patch_version="3.13.9";; \
41-
3.14) python_patch_version="3.14.0";; \
40+
3.14) python_patch_version="3.14.5";; \
4241
esac && \
4342
curl -L -o python.tar.zst \
4443
https://github.com/astral-sh/python-build-standalone/releases/download/${build_date}/cpython-${python_patch_version}+${build_date}-${arch}-unknown-linux-musl-freethreaded+lto-full.tar.zst && \

ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,10 @@ ARG base
2424
# hadolint ignore=DL3006
2525
FROM ${base}
2626

27-
ARG python=3.13
27+
ARG python=3.14
2828

2929
# hadolint ignore=SC1072
30-
RUN (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.1") & \
31-
(if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0")
30+
RUN (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.5")
3231

3332
SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
3433
RUN $version = $env:PYTHON_VERSION; \
@@ -40,20 +39,15 @@ RUN $version = $env:PYTHON_VERSION; \
4039
ENV PYTHON_CMD="py -${python}t"
4140

4241
SHELL ["cmd", "/S", "/C"]
43-
RUN %PYTHON_CMD% -m pip install -U pip setuptools & \
44-
if "%python%"=="3.13" ( \
45-
setx REQUIREMENTS_FILE "requirements-wheel-test-3.13t.txt" \
46-
) else ( \
47-
setx REQUIREMENTS_FILE "requirements-wheel-test.txt" \
48-
)
49-
50-
COPY python/requirements-wheel-test-3.13t.txt python/requirements-wheel-test.txt C:/arrow/python/
42+
RUN %PYTHON_CMD% -m pip install -U pip setuptools
43+
44+
COPY python/requirements-wheel-test.txt C:/arrow/python/
5145
# Cython and Pandas wheels for free-threaded are not released yet
5246
RUN %PYTHON_CMD% -m pip install \
5347
--extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple \
5448
--pre \
5549
--prefer-binary \
56-
-r C:/arrow/python/%REQUIREMENTS_FILE%
50+
-r C:/arrow/python/requirements-wheel-test.txt
5751

5852
ENV PYTHON="${python}t"
5953
ENV PYTHON_GIL=0

ci/docker/python-wheel-musllinux.dockerfile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ RUN apk add --no-cache \
4141
# We will be able to use the main repo once we move to alpine 3.22 or later.
4242
RUN apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community mono
4343

44+
# The linker shipped in Alpine (ld 2.44) causes issue with the generated wheel
45+
# on x86_64 which makes "import pyarrow" abort at startup with:
46+
# Invalid file descriptor data passed to EncodedDescriptorDatabase::Add()
47+
# See: GH-48028
48+
# Link with mold to work around it.
49+
ENV ARROW_USE_MOLD=ON
50+
RUN apk add --no-cache mold
51+
4452
# A system Python is required for ninja and vcpkg in this Dockerfile.
4553
# On musllinux_1_2 a system python is installed (3.12) but pip is not
4654
# We therefore override the PATH with Python 3.10 in /opt/python

ci/scripts/install_python.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ versions=([3.10]=3.10.11
2929
[3.11]=3.11.9
3030
[3.12]=3.12.10
3131
[3.13]=3.13.9
32-
[3.13t]=3.13.9
3332
[3.14]=3.14.0
3433
[3.14t]=3.14.0)
3534

@@ -52,7 +51,7 @@ if [ "$platform" = "macOS" ]; then
5251
wget "https://www.python.org/ftp/python/${full_version}/${fname}"
5352

5453
echo "Installing Python..."
55-
if [[ $2 == "3.13t" ]] || [[ $2 == "3.14t" ]]; then
54+
if [[ $2 == "3.14t" ]]; then
5655
# Extract the base version without 't' suffix
5756
base_version="${version%t}"
5857
# See https://github.com/python/cpython/issues/120098#issuecomment-2151122033 for more info on this.
@@ -80,7 +79,7 @@ EOF
8079
rm "$fname"
8180

8281
python="/Library/Frameworks/Python.framework/Versions/${version}/bin/python${version}"
83-
if [[ $2 == "3.13t" ]] || [[ $2 == "3.14t" ]]; then
82+
if [[ $2 == "3.14t" ]]; then
8483
base_version="${version%t}"
8584
python="/Library/Frameworks/PythonT.framework/Versions/${base_version}/bin/python${base_version}t"
8685
fi

ci/scripts/python_wheel_unix_test.sh

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,9 @@ if [ "${CHECK_WHEEL_CONTENT}" == "ON" ]; then
100100
--path "${source_dir}/python/repaired_wheels"
101101
fi
102102

103-
is_free_threaded() {
104-
python -c "import sysconfig; print('ON' if sysconfig.get_config_var('Py_GIL_DISABLED') else 'OFF')"
105-
}
106-
107103
if [ "${CHECK_UNITTESTS}" == "ON" ]; then
108104
# Install testing dependencies
109-
if [ "$(is_free_threaded)" = "ON" ] && [[ "${PYTHON:-}" == *"3.13"* ]]; then
110-
echo "Free-threaded Python 3.13 build detected"
111-
python -m pip install -U -r "${source_dir}/python/requirements-wheel-test-3.13t.txt"
112-
else
113-
echo "Regular Python build detected"
114-
python -m pip install -U -r "${source_dir}/python/requirements-wheel-test.txt"
115-
fi
105+
python -m pip install -U -r "${source_dir}/python/requirements-wheel-test.txt"
116106

117107
# Execute unittest, test dependencies must be installed
118108
python -c 'import pyarrow; pyarrow.create_library_symlinks()'

0 commit comments

Comments
 (0)