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

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


The following commit(s) were added to refs/heads/main by this push:
     new 9841bf502 chore(python): drop support for Python 3.10 (EOL) (#4859)
9841bf502 is described below

commit 9841bf502326239dfe6d6a9fb4d853f3cf525e6a
Author: David Li <[email protected]>
AuthorDate: Tue Oct 6 18:43:30 2026 -0700

    chore(python): drop support for Python 3.10 (EOL) (#4859)
    
    We can't add 3.15 until it is finally released and PyArrow adds wheels.
---
 .github/workflows/native-unix.yml            |  2 +-
 .github/workflows/native-windows.yml         |  2 +-
 .github/workflows/packaging.yml              | 32 -------------
 ci/scripts/install_python.sh                 | 70 ----------------------------
 ci/scripts/python_util.sh                    |  4 +-
 ci/scripts/verify_ubuntu.sh                  | 11 +++--
 dev/release/verify-release-candidate.ps1     |  4 +-
 dev/release/verify-release-candidate.sh      |  6 +--
 python/adbc_driver_flightsql/pyproject.toml  |  2 +-
 python/adbc_driver_manager/pyproject.toml    |  2 +-
 python/adbc_driver_postgresql/pyproject.toml |  2 +-
 python/adbc_driver_sqlite/pyproject.toml     |  2 +-
 12 files changed, 20 insertions(+), 119 deletions(-)

diff --git a/.github/workflows/native-unix.yml 
b/.github/workflows/native-unix.yml
index 6660bd20e..b20cfcfc2 100644
--- a/.github/workflows/native-unix.yml
+++ b/.github/workflows/native-unix.yml
@@ -535,7 +535,7 @@ jobs:
     strategy:
       matrix:
         os: ["macos-15-intel", "macos-latest", "ubuntu-latest"]
-        python: ["3.10", "3.14"]
+        python: ["3.11", "3.14"]
     env:
       # Required for macOS
       # 
https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk
diff --git a/.github/workflows/native-windows.yml 
b/.github/workflows/native-windows.yml
index 10e24abe1..ff844f70d 100644
--- a/.github/workflows/native-windows.yml
+++ b/.github/workflows/native-windows.yml
@@ -264,7 +264,7 @@ jobs:
     strategy:
       matrix:
         os: ["windows-latest"]
-        python: ["3.10", "3.14"]
+        python: ["3.11", "3.14"]
     steps:
       - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
         with:
diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml
index 653c42ba6..92be0caeb 100644
--- a/.github/workflows/packaging.yml
+++ b/.github/workflows/packaging.yml
@@ -730,14 +730,6 @@ jobs:
             adbc/python/adbc_driver_postgresql/repaired_wheels/*.whl
             adbc/python/adbc_driver_sqlite/repaired_wheels/*.whl
 
-      - name: Test wheel 3.10
-        env:
-          ARCH: ${{ matrix.arch }}
-          PLATFORM: ${{ matrix.platform }}
-        run: |
-          pushd adbc
-          env PYTHON=3.10 docker compose run python-wheel-manylinux-test
-
       - name: Test wheel 3.11
         env:
           ARCH: ${{ matrix.arch }}
@@ -871,16 +863,6 @@ jobs:
       # us. You can get the interpreter path by inspecting CI output (search
       # for "Building cp314-macos"...)
 
-      - name: Test wheel 3.10
-        run: |
-          pushd adbc
-
-          /Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10 -m 
venv test-env-310
-          source test-env-310/bin/activate
-          export PYTHON_VERSION=3.10
-          ./ci/scripts/python_wheel_unix_test.sh $(pwd)
-          deactivate
-
       - name: Test wheel 3.11
         run: |
           pushd adbc
@@ -1034,16 +1016,6 @@ jobs:
           cache: false  # disable to protect against cache poisoning
           cache-dependency-path: adbc/go/adbc/go.sum
 
-      - name: Install Python 3.10
-        if: matrix.arch == 'amd64'
-        id: python310
-        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
-        with:
-          architecture: ${{ matrix.python_arch }}
-          check-latest: true
-          python-version: "3.10"
-          update-environment: false
-
       - name: Install Python 3.11
         id: python311
         uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
@@ -1107,7 +1079,6 @@ jobs:
       - name: Build driver manager wheels
         shell: pwsh
         env:
-          PYTHON_310: ${{ steps.python310.outputs.python-path }}
           PYTHON_311: ${{ steps.python311.outputs.python-path }}
           PYTHON_312: ${{ steps.python312.outputs.python-path }}
           PYTHON_313: ${{ steps.python313.outputs.python-path }}
@@ -1117,7 +1088,6 @@ jobs:
         run: |
           $OriginalPath = $env:PATH
           $Pythons = @(
-            @{ Version = "3.10"; Path = $env:PYTHON_310 },
             @{ Version = "3.11"; Path = $env:PYTHON_311 },
             @{ Version = "3.12"; Path = $env:PYTHON_312 },
             @{ Version = "3.13"; Path = $env:PYTHON_313 },
@@ -1153,7 +1123,6 @@ jobs:
       - name: Test wheel
         shell: pwsh
         env:
-          PYTHON_310: ${{ steps.python310.outputs.python-path }}
           PYTHON_311: ${{ steps.python311.outputs.python-path }}
           PYTHON_312: ${{ steps.python312.outputs.python-path }}
           PYTHON_313: ${{ steps.python313.outputs.python-path }}
@@ -1163,7 +1132,6 @@ jobs:
           $DriverDir = Join-Path $PWD "adbc/build/bin"
           $OriginalPath = "$DriverDir;$env:PATH"
           $Pythons = @(
-            @{ Version = "3.10"; Path = $env:PYTHON_310 },
             @{ Version = "3.11"; Path = $env:PYTHON_311 },
             @{ Version = "3.12"; Path = $env:PYTHON_312 },
             @{ Version = "3.13"; Path = $env:PYTHON_313 },
diff --git a/ci/scripts/install_python.sh b/ci/scripts/install_python.sh
deleted file mode 100755
index adf65dd4c..000000000
--- a/ci/scripts/install_python.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env bash
-#
-# 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.
-
-# From apache/arrow/ci/scripts/install_python.sh
-
-set -euxo pipefail
-
-declare -A platforms
-platforms=([windows]=Windows
-           [macos]=MacOSX
-           [linux]=Linux)
-
-declare -A versions
-versions=([3.10]=3.10.19
-          [3.11]=3.11.14
-          [3.12]=3.12.12
-          [3.13]=3.13.11
-          [3.14]=3.14.2)
-
-if [ "$#" -ne 2 ]; then
-  echo "Usage: $0 <platform> <version>"
-  exit 1
-elif [[ -z ${platforms[$1]} ]]; then
-  echo "Unexpected platform: ${1}"
-  exit 1
-fi
-
-platform=${platforms[$1]}
-version=$2
-full_version=${versions[$2]}
-
-if [ $platform = "MacOSX" ]; then
-    echo "Downloading Python installer..."
-
-    if [ "$(uname -m)" != "arm64" ] && [ "$version" = "3.9" ]; then
-        fname="python-${full_version}-macosx10.9.pkg"
-    else
-        fname="python-${full_version}-macos11.pkg"
-    fi
-    wget "https://www.python.org/ftp/python/${full_version}/${fname}";
-
-    echo "Installing Python..."
-    installer -pkg $fname -target /
-    rm $fname
-
-    echo "Installing Pip..."
-    
python="/Library/Frameworks/Python.framework/Versions/${version}/bin/python${version}"
-    pip="${python} -m pip"
-
-    $python -m ensurepip
-    $pip install -U pip setuptools
-else
-    echo "Unsupported platform: $platform"
-fi
diff --git a/ci/scripts/python_util.sh b/ci/scripts/python_util.sh
index 30939703d..009adccef 100644
--- a/ci/scripts/python_util.sh
+++ b/ci/scripts/python_util.sh
@@ -126,8 +126,8 @@ function setup_build_vars {
         export CIBW_BUILD='*-manylinux_*'
         export CIBW_PLATFORM="linux"
     fi
-    # No PyPy, no Python 3.8, no Python 3.9
-    export CIBW_SKIP="pp* cp38-* cp39-* ${CIBW_SKIP}"
+    # No PyPy, no EOL Python versions
+    export CIBW_SKIP="pp* cp38-* cp39-* cp310-* ${CIBW_SKIP}"
     export CIBW_MANYLINUX_X86_64_IMAGE="manylinux_2_28"
     export CIBW_MANYLINUX_AARCH64_IMAGE="manylinux_2_28"
 }
diff --git a/ci/scripts/verify_ubuntu.sh b/ci/scripts/verify_ubuntu.sh
index 091479450..11a64172e 100755
--- a/ci/scripts/verify_ubuntu.sh
+++ b/ci/scripts/verify_ubuntu.sh
@@ -39,6 +39,12 @@ main() {
     export TZ=Etc/UTC
 
     echo "::group::Install APT dependencies"
+    export PYTHON_DEPENDENCIES="python3 python3-dev python3-pip python3-venv"
+    source /etc/lsb-release
+    if [[ "${DISTRIB_RELEASE}" = "22.04" ]]; then
+        export PYTHON_DEPENDENCIES="python3.11 python3.11-dev python3.11-venv"
+        export PYTHON=python3.11
+    fi
     apt update
     apt install -y \
         apt-transport-https \
@@ -61,10 +67,7 @@ main() {
         ninja-build \
         pkg-config \
         protobuf-compiler \
-        python3 \
-        python3-dev \
-        python3-pip \
-        python3-venv \
+        ${PYTHON_DEPENDENCIES} \
         r-base \
         ruby-full \
         software-properties-common \
diff --git a/dev/release/verify-release-candidate.ps1 
b/dev/release/verify-release-candidate.ps1
index 86897cbd4..70d9d5994 100755
--- a/dev/release/verify-release-candidate.ps1
+++ b/dev/release/verify-release-candidate.ps1
@@ -53,7 +53,7 @@ Usage:
 
 Assumes Mamba is set up and available on the path, except for Windows ARM64
 binary verification. On Windows ARM64, supply Python executable paths using
-PYTHON_310_PATH, etc. (Source verification is not supported on Windows/ARM64.)
+PYTHON_314_PATH, etc. (Source verification is not supported on Windows/ARM64.)
 "@
     exit 1
 }
@@ -443,7 +443,7 @@ if ($TestBinaryArtifacts) {
         }
 
         if ($env:TEST_PYTHON_VERSIONS -eq $null) {
-            $PythonVersions = @("3.10", "3.11", "3.12", "3.13", "3.14", 
"3.14t")
+            $PythonVersions = @("3.11", "3.12", "3.13", "3.14", "3.14t")
         } else {
             $PythonVersions = @($env:TEST_PYTHON_VERSIONS.Split(" ", 
[System.StringSplitOptions]::RemoveEmptyEntries))
         }
diff --git a/dev/release/verify-release-candidate.sh 
b/dev/release/verify-release-candidate.sh
index 3a33eed0e..87a8cf92b 100755
--- a/dev/release/verify-release-candidate.sh
+++ b/dev/release/verify-release-candidate.sh
@@ -297,7 +297,7 @@ install_go() {
     return 0
   fi
 
-  local version=1.24.2
+  local version=1.26.8
   show_info "Installing go version ${version}..."
 
   local arch="$(uname -m)"
@@ -462,7 +462,7 @@ maybe_setup_virtualenv() {
     fi
     # Check that python interpreter exists
     if ! command -v "${python}" &> /dev/null; then
-      echo "Couldn't locate python interpreter with version ${pyver}"
+      echo "Couldn't locate python interpreter with version ${pyver} ($python)"
       echo "Call the script with USE_CONDA=1 to test all of the python 
versions."
       return 1
     else
@@ -821,7 +821,7 @@ test_unix_wheels() {
   local arch="${1}"
   local platform="${2}"
 
-  local python_versions="${TEST_PYTHON_VERSIONS:-3.10 3.11 3.12 3.13 3.14 
3.14t}"
+  local python_versions="${TEST_PYTHON_VERSIONS:-3.11 3.12 3.13 3.14 3.14t}"
 
   for python in ${python_versions}; do
     local pyver=${python/t}
diff --git a/python/adbc_driver_flightsql/pyproject.toml 
b/python/adbc_driver_flightsql/pyproject.toml
index 1c002245d..7eeb2d280 100644
--- a/python/adbc_driver_flightsql/pyproject.toml
+++ b/python/adbc_driver_flightsql/pyproject.toml
@@ -22,7 +22,7 @@ authors = [{name = "Apache Arrow Developers", email = 
"[email protected]"}]
 license = "Apache-2.0"
 license-files = ["LICENSE.txt", "NOTICE.txt"]
 readme = "README.md"
-requires-python = ">=3.10"
+requires-python = ">=3.11"
 dynamic = ["version"]
 dependencies = [
     "adbc-driver-manager",
diff --git a/python/adbc_driver_manager/pyproject.toml 
b/python/adbc_driver_manager/pyproject.toml
index 98f82dc30..3999f7aa8 100644
--- a/python/adbc_driver_manager/pyproject.toml
+++ b/python/adbc_driver_manager/pyproject.toml
@@ -22,7 +22,7 @@ authors = [{name = "Apache Arrow Developers", email = 
"[email protected]"}]
 license = "Apache-2.0"
 license-files = ["LICENSE.txt", "NOTICE.txt"]
 readme = "README.md"
-requires-python = ">=3.10"
+requires-python = ">=3.11"
 dynamic = ["version"]
 dependencies = ["typing-extensions"]
 
diff --git a/python/adbc_driver_postgresql/pyproject.toml 
b/python/adbc_driver_postgresql/pyproject.toml
index 18d502821..18efcdf8c 100644
--- a/python/adbc_driver_postgresql/pyproject.toml
+++ b/python/adbc_driver_postgresql/pyproject.toml
@@ -22,7 +22,7 @@ authors = [{name = "Apache Arrow Developers", email = 
"[email protected]"}]
 license = "Apache-2.0"
 license-files = ["LICENSE.txt", "NOTICE.txt"]
 readme = "README.md"
-requires-python = ">=3.10"
+requires-python = ">=3.11"
 dynamic = ["version"]
 dependencies = [
     "adbc-driver-manager",
diff --git a/python/adbc_driver_sqlite/pyproject.toml 
b/python/adbc_driver_sqlite/pyproject.toml
index 348d6610c..ab53910a8 100644
--- a/python/adbc_driver_sqlite/pyproject.toml
+++ b/python/adbc_driver_sqlite/pyproject.toml
@@ -22,7 +22,7 @@ authors = [{name = "Apache Arrow Developers", email = 
"[email protected]"}]
 license = "Apache-2.0"
 license-files = ["LICENSE.txt", "NOTICE.txt"]
 readme = "README.md"
-requires-python = ">=3.10"
+requires-python = ">=3.11"
 dynamic = ["version"]
 dependencies = [
     "adbc-driver-manager",

Reply via email to