This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new b35883ea37 GH-48028: [Python][Packaging] Update quay.io base manylinux 
and musllinux images for Python wheels and remove cp313t (#50082)
b35883ea37 is described below

commit b35883ea37edd24a5e3ed41d6fb91374c4721782
Author: Raúl Cumplido <[email protected]>
AuthorDate: Fri Jun 5 22:42:26 2026 +0200

    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:
    -  https://github.com/apache/arrow/issues/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 <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 .env                                               |  4 +-
 .../linux-apt-python-313-freethreading.dockerfile  | 59 ----------------------
 ...hreaded-wheel-manylinux-test-imports.dockerfile |  2 +-
 ...eaded-wheel-manylinux-test-unittests.dockerfile |  2 +-
 ...hreaded-wheel-musllinux-test-imports.dockerfile |  5 +-
 ...eaded-wheel-musllinux-test-unittests.dockerfile |  5 +-
 ...e-threaded-wheel-windows-test-vs2022.dockerfile | 18 +++----
 ci/docker/python-wheel-musllinux.dockerfile        |  8 +++
 ci/scripts/install_python.sh                       |  5 +-
 ci/scripts/python_wheel_unix_test.sh               | 12 +----
 ci/scripts/python_wheel_xlinux_build.sh            |  2 +
 compose.yaml                                       | 35 ++-----------
 dev/tasks/tasks.yml                                |  9 ----
 python/requirements-test-3.13t.txt                 |  5 --
 python/requirements-wheel-test-3.13t.txt           |  9 ----
 15 files changed, 31 insertions(+), 149 deletions(-)

diff --git a/.env b/.env
index b18b98752b..980dc243b8 100644
--- a/.env
+++ b/.env
@@ -98,5 +98,5 @@ VCPKG="9b965a116838c6cdcd36bca60d1b81b030c8ab8d"    # 
2026.05.27 (not release, u
 # ci/docker/python-*-windows-*.dockerfile or the vcpkg config.
 # This is a workaround for our CI problem that "archery docker build" doesn't
 # use pulled built images in dev/tasks/python-wheels/github.windows.yml.
-PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2026-05-27
-PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION=2026-05-27
+PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2026-06-03
+PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION=2026-06-03
diff --git a/ci/docker/linux-apt-python-313-freethreading.dockerfile 
b/ci/docker/linux-apt-python-313-freethreading.dockerfile
deleted file mode 100644
index ceed5bac7e..0000000000
--- a/ci/docker/linux-apt-python-313-freethreading.dockerfile
+++ /dev/null
@@ -1,59 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-ARG base
-FROM ${base}
-
-RUN apt-get update -y -q && \
-    apt install -y -q --no-install-recommends software-properties-common 
gpg-agent && \
-    add-apt-repository -y ppa:deadsnakes/ppa && \
-    apt-get update -y -q && \
-    apt install -y -q --no-install-recommends python3.13-dev python3.13-nogil 
python3.13-venv && \
-    apt-get clean && \
-    rm -rf /var/lib/apt/lists*
-
-COPY python/requirements-build.txt \
-     python/requirements-test-3.13t.txt \
-     /arrow/python/
-
-ENV ARROW_PYTHON_VENV /arrow-dev
-RUN python3.13t -m venv ${ARROW_PYTHON_VENV}
-RUN ${ARROW_PYTHON_VENV}/bin/python -m pip install -U pip setuptools wheel
-RUN ${ARROW_PYTHON_VENV}/bin/python -m pip install \
-      --pre \
-      --prefer-binary \
-      --extra-index-url 
"https://pypi.anaconda.org/scientific-python-nightly-wheels/simple"; \
-      -r arrow/python/requirements-build.txt \
-      -r arrow/python/requirements-test-3.13t.txt
-
-# We want to run the PyArrow test suite with the GIL disabled, but cffi
-# (more precisely, the `_cffi_backend` module) currently doesn't declare
-# itself safe to run without the GIL.
-# Therefore set PYTHON_GIL to 0.
-ENV ARROW_ACERO=ON \
-    ARROW_BUILD_STATIC=OFF \
-    ARROW_BUILD_TESTS=OFF \
-    ARROW_BUILD_UTILITIES=OFF \
-    ARROW_COMPUTE=ON \
-    ARROW_CSV=ON \
-    ARROW_DATASET=ON \
-    ARROW_FILESYSTEM=ON \
-    ARROW_GDB=ON \
-    ARROW_HDFS=ON \
-    ARROW_JSON=ON \
-    ARROW_USE_GLOG=OFF \
-    PYTHON_GIL=0
diff --git 
a/ci/docker/python-free-threaded-wheel-manylinux-test-imports.dockerfile 
b/ci/docker/python-free-threaded-wheel-manylinux-test-imports.dockerfile
index e4149821de..4a9a695230 100644
--- a/ci/docker/python-free-threaded-wheel-manylinux-test-imports.dockerfile
+++ b/ci/docker/python-free-threaded-wheel-manylinux-test-imports.dockerfile
@@ -18,7 +18,7 @@
 ARG base
 FROM ${base}
 
-ARG python_version=3.13
+ARG python_version=3.14
 
 ENV DEBIAN_FRONTEND=noninteractive
 
diff --git 
a/ci/docker/python-free-threaded-wheel-manylinux-test-unittests.dockerfile 
b/ci/docker/python-free-threaded-wheel-manylinux-test-unittests.dockerfile
index 566f0c0402..fe1a367e69 100644
--- a/ci/docker/python-free-threaded-wheel-manylinux-test-unittests.dockerfile
+++ b/ci/docker/python-free-threaded-wheel-manylinux-test-unittests.dockerfile
@@ -18,7 +18,7 @@
 ARG base
 FROM ${base}
 
-ARG python_version=3.13
+ARG python_version=3.14
 
 ENV DEBIAN_FRONTEND=noninteractive
 
diff --git 
a/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile 
b/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile
index e2e4eb8f99..af56749202 100644
--- a/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile
+++ b/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile
@@ -18,7 +18,7 @@
 ARG base
 FROM ${base}
 
-ARG python_version=3.13
+ARG python_version=3.14
 ARG arch=aarch64
 ARG build_date
 
@@ -35,8 +35,7 @@ RUN apk update && \
 # See available releases at: 
https://github.com/astral-sh/python-build-standalone/releases
 RUN set -e; \
     case "${python_version}" in \
-      3.13) python_patch_version="3.13.9";; \
-      3.14) python_patch_version="3.14.0";; \
+      3.14) python_patch_version="3.14.5";; \
     esac && \
     curl -L -o python.tar.zst \
     
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
 && \
diff --git 
a/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile 
b/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile
index 53ae58c793..7efcd2107a 100644
--- a/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile
+++ b/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile
@@ -18,7 +18,7 @@
 ARG base
 FROM ${base}
 
-ARG python_version=3.13
+ARG python_version=3.14
 ARG arch=aarch64
 ARG build_date
 
@@ -37,8 +37,7 @@ RUN apk update && \
 # See available releases at: 
https://github.com/astral-sh/python-build-standalone/releases
 RUN set -e; \
     case "${python_version}" in \
-      3.13) python_patch_version="3.13.9";; \
-      3.14) python_patch_version="3.14.0";; \
+      3.14) python_patch_version="3.14.5";; \
     esac && \
     curl -L -o python.tar.zst \
     
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
 && \
diff --git 
a/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile 
b/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile
index ab257b271e..d0d9793d1f 100644
--- a/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile
+++ b/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile
@@ -24,11 +24,10 @@ ARG base
 # hadolint ignore=DL3006
 FROM ${base}
 
-ARG python=3.13
+ARG python=3.14
 
 # hadolint ignore=SC1072
-RUN (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.1") & \
-    (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0")
+RUN (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.5")
 
 SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 
'Stop'; $ProgressPreference = 'SilentlyContinue';"]
 RUN $version = $env:PYTHON_VERSION; \
@@ -40,20 +39,15 @@ RUN $version = $env:PYTHON_VERSION; \
 ENV PYTHON_CMD="py -${python}t"
 
 SHELL ["cmd", "/S", "/C"]
-RUN %PYTHON_CMD% -m pip install -U pip setuptools & \
-    if "%python%"=="3.13" ( \
-        setx REQUIREMENTS_FILE "requirements-wheel-test-3.13t.txt" \
-    ) else ( \
-        setx REQUIREMENTS_FILE "requirements-wheel-test.txt" \
-    )
-
-COPY python/requirements-wheel-test-3.13t.txt 
python/requirements-wheel-test.txt C:/arrow/python/
+RUN %PYTHON_CMD% -m pip install -U pip setuptools
+
+COPY python/requirements-wheel-test.txt C:/arrow/python/
 # Cython and Pandas wheels for free-threaded are not released yet
 RUN %PYTHON_CMD% -m pip install \
     --extra-index-url 
https://pypi.anaconda.org/scientific-python-nightly-wheels/simple \
     --pre \
     --prefer-binary \
-    -r C:/arrow/python/%REQUIREMENTS_FILE%
+    -r C:/arrow/python/requirements-wheel-test.txt
 
 ENV PYTHON="${python}t"
 ENV PYTHON_GIL=0
diff --git a/ci/docker/python-wheel-musllinux.dockerfile 
b/ci/docker/python-wheel-musllinux.dockerfile
index 40b7bceda0..1ddbcfb81e 100644
--- a/ci/docker/python-wheel-musllinux.dockerfile
+++ b/ci/docker/python-wheel-musllinux.dockerfile
@@ -41,6 +41,14 @@ RUN apk add --no-cache \
 # We will be able to use the main repo once we move to alpine 3.22 or later.
 RUN apk add --no-cache 
--repository=https://dl-cdn.alpinelinux.org/alpine/edge/community mono
 
+# The linker shipped in Alpine (ld 2.44) causes issue with the generated wheel
+# on x86_64 which makes "import pyarrow" abort at startup with:
+#   Invalid file descriptor data passed to EncodedDescriptorDatabase::Add()
+# See: GH-48028
+# Link with mold to work around it.
+ENV ARROW_USE_MOLD=ON
+RUN apk add --no-cache mold
+
 # A system Python is required for ninja and vcpkg in this Dockerfile.
 # On musllinux_1_2 a system python is installed (3.12) but pip is not
 # We therefore override the PATH with Python 3.10 in /opt/python
diff --git a/ci/scripts/install_python.sh b/ci/scripts/install_python.sh
index c683d2b883..b02a6ce63e 100755
--- a/ci/scripts/install_python.sh
+++ b/ci/scripts/install_python.sh
@@ -29,7 +29,6 @@ versions=([3.10]=3.10.11
           [3.11]=3.11.9
           [3.12]=3.12.10
           [3.13]=3.13.9
-          [3.13t]=3.13.9
           [3.14]=3.14.0
           [3.14t]=3.14.0)
 
@@ -52,7 +51,7 @@ if [ "$platform" = "macOS" ]; then
     wget "https://www.python.org/ftp/python/${full_version}/${fname}";
 
     echo "Installing Python..."
-    if [[ $2 == "3.13t" ]] || [[ $2 == "3.14t" ]]; then
+    if [[ $2 == "3.14t" ]]; then
         # Extract the base version without 't' suffix
         base_version="${version%t}"
         # See 
https://github.com/python/cpython/issues/120098#issuecomment-2151122033 for 
more info on this.
@@ -80,7 +79,7 @@ EOF
     rm "$fname"
 
     
python="/Library/Frameworks/Python.framework/Versions/${version}/bin/python${version}"
-    if [[ $2 == "3.13t" ]] || [[ $2 == "3.14t" ]]; then
+    if [[ $2 == "3.14t" ]]; then
         base_version="${version%t}"
         
python="/Library/Frameworks/PythonT.framework/Versions/${base_version}/bin/python${base_version}t"
     fi
diff --git a/ci/scripts/python_wheel_unix_test.sh 
b/ci/scripts/python_wheel_unix_test.sh
index 2b8ee7be74..cb445611e2 100755
--- a/ci/scripts/python_wheel_unix_test.sh
+++ b/ci/scripts/python_wheel_unix_test.sh
@@ -100,19 +100,9 @@ if [ "${CHECK_WHEEL_CONTENT}" == "ON" ]; then
     --path "${source_dir}/python/repaired_wheels"
 fi
 
-is_free_threaded() {
-  python -c "import sysconfig; print('ON' if 
sysconfig.get_config_var('Py_GIL_DISABLED') else 'OFF')"
-}
-
 if [ "${CHECK_UNITTESTS}" == "ON" ]; then
   # Install testing dependencies
-  if [ "$(is_free_threaded)" = "ON" ] && [[ "${PYTHON:-}" == *"3.13"* ]]; then
-    echo "Free-threaded Python 3.13 build detected"
-    python -m pip install -U -r 
"${source_dir}/python/requirements-wheel-test-3.13t.txt"
-  else
-    echo "Regular Python build detected"
-    python -m pip install -U -r 
"${source_dir}/python/requirements-wheel-test.txt"
-  fi
+  python -m pip install -U -r 
"${source_dir}/python/requirements-wheel-test.txt"
 
   # Execute unittest, test dependencies must be installed
   python -c 'import pyarrow; pyarrow.create_library_symlinks()'
diff --git a/ci/scripts/python_wheel_xlinux_build.sh 
b/ci/scripts/python_wheel_xlinux_build.sh
index 223bd0b1cb..f810b68c0c 100755
--- a/ci/scripts/python_wheel_xlinux_build.sh
+++ b/ci/scripts/python_wheel_xlinux_build.sh
@@ -68,6 +68,7 @@ echo "=== (${PYTHON_VERSION}) Building Arrow C++ libraries 
==="
 : ${ARROW_SUBSTRAIT:=ON}
 : ${ARROW_S3:=ON}
 : ${ARROW_TENSORFLOW:=ON}
+: ${ARROW_USE_MOLD:=OFF}
 : ${ARROW_WITH_BROTLI:=ON}
 : ${ARROW_WITH_BZ2:=ON}
 : ${ARROW_WITH_LZ4:=ON}
@@ -128,6 +129,7 @@ cmake \
     -DARROW_SUBSTRAIT=${ARROW_SUBSTRAIT} \
     -DARROW_TENSORFLOW=${ARROW_TENSORFLOW} \
     -DARROW_USE_CCACHE=ON \
+    -DARROW_USE_MOLD=${ARROW_USE_MOLD} \
     -DARROW_WITH_BROTLI=${ARROW_WITH_BROTLI} \
     -DARROW_WITH_BZ2=${ARROW_WITH_BZ2} \
     -DARROW_WITH_LZ4=${ARROW_WITH_LZ4} \
diff --git a/compose.yaml b/compose.yaml
index f527a835a3..4a4cf60cce 100644
--- a/compose.yaml
+++ b/compose.yaml
@@ -145,7 +145,6 @@ x-hierarchy:
       - ubuntu-ruby
     - ubuntu-python
     - ubuntu-python-sdist-test
-    - ubuntu-python-313-freethreading
     - ubuntu-r
     - ubuntu-r-only-r
   - ubuntu-cpp-bundled
@@ -1132,32 +1131,6 @@ services:
         /arrow/ci/scripts/cpp_build.sh /arrow /build &&
         /arrow/ci/scripts/python_sdist_test.sh /arrow"
 
-  ############################ Python free-threading ##########################
-
-  ubuntu-python-313-freethreading:
-    # Usage:
-    #   docker compose build ubuntu-cpp
-    #   docker compose build ubuntu-python-313-freethreading
-    #   docker compose run --rm ubuntu-python-313-freethreading
-    # Parameters:
-    #   ARCH: amd64, arm64v8, ...
-    #   UBUNTU: 22.04, 24.04
-    image: ${REPO}:${ARCH}-ubuntu-${UBUNTU}-python-313-freethreading
-    build:
-      context: .
-      dockerfile: ci/docker/linux-apt-python-313-freethreading.dockerfile
-      cache_from:
-        - ${REPO}:${ARCH}-ubuntu-${UBUNTU}-python-313-freethreading
-      args:
-        base: ${REPO}:${ARCH}-ubuntu-${UBUNTU}-cpp
-    shm_size: *shm-size
-    environment:
-      <<: [*common, *ccache]
-      # Bundled build of OpenTelemetry needs a git client
-      ARROW_WITH_OPENTELEMETRY: "OFF"
-    volumes: *ubuntu-volumes
-    command: *python-command
-
   ############################ Python wheels ##################################
 
   # See available versions at:
@@ -1168,7 +1141,7 @@ services:
       args:
         arch: ${ARCH}
         arch_short: ${ARCH_SHORT}
-        base: quay.io/pypa/manylinux_2_28_${ARCH_ALIAS}:2025-06-04-496f7e1
+        base: quay.io/pypa/manylinux_2_28_${ARCH_ALIAS}:2026.05.31-3
         manylinux: 2_28
         python: ${PYTHON}
         python_abi_tag: ${PYTHON_ABI_TAG}
@@ -1193,7 +1166,7 @@ services:
       args:
         arch: ${ARCH}
         arch_short: ${ARCH_SHORT}
-        base: quay.io/pypa/musllinux_1_2_${ARCH_ALIAS}:2025-06-04-496f7e1
+        base: quay.io/pypa/musllinux_1_2_${ARCH_ALIAS}:2026.05.31-3
         musllinux: 1_2
         python: ${PYTHON}
         python_abi_tag: ${PYTHON_ABI_TAG}
@@ -1234,7 +1207,7 @@ services:
       args:
         base: "${ARCH}/alpine:${ALPINE_LINUX}"
         python_version: ${PYTHON}
-        build_date: "20251014"  # python-build-standalone release date
+        build_date: "20260510"  # python-build-standalone release date
         arch: ${ARCH_ALIAS}
       context: .
       dockerfile: 
ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile
@@ -1278,7 +1251,7 @@ services:
       args:
         base: "${ARCH}/alpine:${ALPINE_LINUX}"
         python_version: ${PYTHON}
-        build_date: "20251014"  # python-build-standalone release date
+        build_date: "20260510"  # python-build-standalone release date
         arch: ${ARCH_ALIAS}
       context: .
       dockerfile: 
ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile
diff --git a/dev/tasks/tasks.yml b/dev/tasks/tasks.yml
index 2d2b9ae39e..f7cb2b92ad 100644
--- a/dev/tasks/tasks.yml
+++ b/dev/tasks/tasks.yml
@@ -142,7 +142,6 @@ tasks:
                                                ("3.11", "cp311", "cp311"),
                                                ("3.12", "cp312", "cp312"),
                                                ("3.13", "cp313", "cp313"),
-                                               ("3.13", "cp313", "cp313t"),
                                                ("3.14", "cp314", "cp314"),
                                                ("3.14", "cp314", "cp314t")] %}
 
@@ -538,14 +537,6 @@ tasks:
         PYTEST_ARGS: "-m hypothesis -W error"
       image: conda-python-pandas
 
-  test-ubuntu-22.04-python-313-freethreading:
-    ci: github
-    template: docker-tests/github.linux.yml
-    params:
-      env:
-        UBUNTU: 22.04
-      image: ubuntu-python-313-freethreading
-
 {% for debian_version in ["13"] %}
   test-debian-{{ debian_version }}-python-3-amd64:
     ci: github
diff --git a/python/requirements-test-3.13t.txt 
b/python/requirements-test-3.13t.txt
deleted file mode 100644
index 9c2e8de25e..0000000000
--- a/python/requirements-test-3.13t.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-hypothesis
-packaging
-pandas
-pytest
-pytz
diff --git a/python/requirements-wheel-test-3.13t.txt 
b/python/requirements-wheel-test-3.13t.txt
deleted file mode 100644
index 009b7d6b31..0000000000
--- a/python/requirements-wheel-test-3.13t.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-cython
-hypothesis
-numpy~=2.1.0
-packaging
-pandas
-pytest
-pytz
-requests; sys_platform == 'win32'
-tzdata; sys_platform == 'win32'

Reply via email to