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",