Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
266b12a
ci: add cp315/cp315t to builds.
paultiq Nov 20, 2025
2d2a557
ci: add marker for cffi and pandas for < "3.15". this is temporary un…
paultiq Nov 20, 2025
6979e8c
Merge remote-tracking branch 'upstream/main' into cp315_nightly
paultiq Jun 10, 2026
9ed3dc3
bump libcst to 1.9.0 for Python 3.15
paultiq Aug 13, 2026
76695d4
Merge remote-tracking branch 'origin/main' into cp315_nightly
paultiq Aug 13, 2026
9214919
chore: bump manylinux image to 08.08 to include 3.15-rc1
paultiq Aug 13, 2026
879a777
add -rc suffix for 3.15, since 3.15 is not yet released.
paultiq Aug 13, 2026
b6d48c6
disable pandas tests for cp315 by checking whether pandas is installe…
paultiq Aug 13, 2026
89f007d
reenable cffi for cp315
paultiq Aug 13, 2026
e8fc497
reenable cffi on 3.15
paultiq Aug 13, 2026
5de3f4b
numpy 2.5.2 is minimum for 3.15-rc1
paultiq Aug 13, 2026
7046bfa
ALPINE_LINUX => 3.23: Python is no longer rebuilt on 3.22
paultiq Aug 14, 2026
6fb35d8
Use a version gate, rather than import gate, for 3.15 pandas
paultiq Aug 14, 2026
521c6ec
Add Python 3.15.0rc1: bump build_date to 20260807, add 3.15.0rc1 and …
paultiq Aug 14, 2026
5b13d85
bump image revision
paultiq Aug 14, 2026
7e5f900
add 3.15 for windows dockerfiles, and maintenance: move 3.14.5 to lat…
paultiq Aug 14, 2026
892f7e5
Merge remote-tracking branch 'upstream/main' into cp315_nightly
paultiq Aug 14, 2026
bb049d5
add 3.15.0rc1 (and bump 3.14.6 to latest: 3.14.7)
paultiq Aug 14, 2026
7bf40dc
disable --only-binary for 3.15 as a temp workaround for missing build…
paultiq Aug 15, 2026
1b9702d
Truncate pre-release suffixes
paultiq Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -98,5 +98,6 @@ 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-07-24
PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION=2026-07-24
PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2026-08-14
PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION=2026-08-14

2 changes: 1 addition & 1 deletion ci/conda_env_python.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ cython>=3.1
cloudpickle
fsspec
hypothesis
libcst>=1.8.6
libcst>=1.9.0
numpy>=1.16.6
pytest
pytest-faulthandler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ RUN apk update && \
# See available releases at: https://github.com/astral-sh/python-build-standalone/releases
RUN set -e; \
case "${python_version}" in \
3.14) python_patch_version="3.14.5";; \
3.14) python_patch_version="3.14.7";; \
3.15) python_patch_version="3.15.0rc1";; \
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 && \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ RUN apk update && \
# See available releases at: https://github.com/astral-sh/python-build-standalone/releases
RUN set -e; \
case "${python_version}" in \
3.14) python_patch_version="3.14.5";; \
3.14) python_patch_version="3.14.7";; \
3.15) python_patch_version="3.15.0rc1";; \
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 && \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,17 @@ FROM ${base}

ARG python=3.14

# PYTHON_RELEASE is the python.org ftp directory, which for a pre-release is the
# final release it leads to, e.g. 3.15.0/python-3.15.0rc1-amd64.exe
# hadolint ignore=SC1072
RUN (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.5")
RUN (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.7" && setx PYTHON_RELEASE "3.14.7") & \
(if "%python%"=="3.15" setx PYTHON_VERSION "3.15.0rc1" && setx PYTHON_RELEASE "3.15.0")

SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
RUN $version = $env:PYTHON_VERSION; \
$release = $env:PYTHON_RELEASE; \
$filename = 'python-' + $version + '-amd64.exe'; \
$url = 'https://www.python.org/ftp/python/' + $version + '/' + $filename; \
$url = 'https://www.python.org/ftp/python/' + $release + '/' + $filename; \
Invoke-WebRequest -Uri $url -OutFile $filename; \
Start-Process -FilePath $filename -ArgumentList '/quiet', 'Include_freethreaded=1' -Wait

Expand Down
4 changes: 3 additions & 1 deletion ci/docker/python-wheel-windows-test-vs2022.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ ARG python=3.11
RUN (if "%python%"=="3.11" setx PYTHON_VERSION "3.11.9" && setx PYTHON_CMD "py -3.11") & \
(if "%python%"=="3.12" setx PYTHON_VERSION "3.12.10" && setx PYTHON_CMD "py -3.12") & \
(if "%python%"=="3.13" setx PYTHON_VERSION "3.13.14" && setx PYTHON_CMD "py -3.13") & \
(if "%python%"=="3.14" setx PYTHON_VERSION "3.14.6" && setx PYTHON_CMD "py -3.14")
(if "%python%"=="3.14" setx PYTHON_VERSION "3.14.7" && setx PYTHON_CMD "py -3.14") & \
(if "%python%"=="3.15" setx PYTHON_VERSION "3.15.0-rc1" && setx PYTHON_CMD "py -3.15")


# hadolint ignore=DL3059
RUN choco install -r -y --pre --no-progress --force python --version=%PYTHON_VERSION%
Expand Down
16 changes: 11 additions & 5 deletions ci/scripts/install_python.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,11 @@ declare -A versions
versions=([3.11]=3.11.9
[3.12]=3.12.10
[3.13]=3.13.14
[3.14]=3.14.6
[3.14t]=3.14.6)
[3.14]=3.14.7
[3.14t]=3.14.7
[3.15]=3.15.0rc1
[3.15t]=3.15.0rc1
)

if [ "$#" -ne 2 ]; then
echo "Usage: $0 <platform> <version>"
Expand All @@ -46,11 +49,14 @@ full_version=${versions[$2]}
if [ "$platform" = "macOS" ]; then
echo "Downloading Python installer..."

# Match python.org directory by truncating any pre-release suffix:
# 3.15.0rc1 is https://www.python.org/ftp/python/3.15.0/python-3.15.0rc1-macos11.pkg
release_version="${full_version%%[abrc]*}"
fname="python-${full_version}-macos11.pkg"
wget "https://www.python.org/ftp/python/${full_version}/${fname}"
wget "https://www.python.org/ftp/python/${release_version}/${fname}"

echo "Installing Python..."
if [[ $2 == "3.14t" ]]; then
if [[ $2 == *t ]]; 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.
Expand Down Expand Up @@ -78,7 +84,7 @@ EOF
rm "$fname"

python="/Library/Frameworks/Python.framework/Versions/${version}/bin/python${version}"
if [[ $2 == "3.14t" ]]; then
if [[ $2 == *t ]]; then
base_version="${version%t}"
python="/Library/Frameworks/PythonT.framework/Versions/${base_version}/bin/python${base_version}t"
fi
Expand Down
8 changes: 7 additions & 1 deletion ci/scripts/python_wheel_macos_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,15 @@ else
exit 1
fi

wheel_build_binary_flag="--only-binary=:all:"
if python -c "import sys; sys.exit(0 if sys.version_info[:2] == (3, 15) else 1)"; then
# TODO: 3.15 workaround due to pyyaml (via libcst). Remove once pyyaml ships 3.15 wheels.
wheel_build_binary_flag=""
fi

pip install \
--force-reinstall \
--only-binary=:all: \
${wheel_build_binary_flag} \
--upgrade \
-r "${source_dir}/python/requirements-wheel-build.txt"
pip install "delocate>=0.10.3"
Expand Down
7 changes: 6 additions & 1 deletion ci/scripts/python_wheel_unix_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@ export PYARROW_TEST_GANDIVA=OFF
export PYARROW_TEST_GCS=${ARROW_GCS}
export PYARROW_TEST_HDFS=ON
export PYARROW_TEST_ORC=ON
export PYARROW_TEST_PANDAS=ON
# TODO: To be removed once pandas provides wheels for Python 3.15
if python -c "import sys; sys.exit(0 if sys.version_info < (3, 15) else 1)"; then
export PYARROW_TEST_PANDAS=ON
else
export PYARROW_TEST_PANDAS=OFF
fi
export PYARROW_TEST_PARQUET=ON
export PYARROW_TEST_PARQUET_ENCRYPTION=ON
export PYARROW_TEST_SUBSTRAIT=${ARROW_SUBSTRAIT}
Expand Down
4 changes: 3 additions & 1 deletion ci/scripts/python_wheel_windows_test.bat
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ set PYARROW_TEST_GANDIVA=OFF
set PYARROW_TEST_GCS=ON
set PYARROW_TEST_HDFS=ON
set PYARROW_TEST_ORC=ON
set PYARROW_TEST_PANDAS=ON
@REM TODO: To be removed once pandas provides wheels for Python 3.15
%PYTHON_CMD% -c "import sys; sys.exit(0 if sys.version_info < (3, 15) else 1)"
if errorlevel 1 (set PYARROW_TEST_PANDAS=OFF) else (set PYARROW_TEST_PANDAS=ON)
set PYARROW_TEST_PARQUET=ON
set PYARROW_TEST_PARQUET_ENCRYPTION=ON
set PYARROW_TEST_SUBSTRAIT=ON
Expand Down
8 changes: 4 additions & 4 deletions compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1178,7 +1178,7 @@ services:
args:
arch: ${ARCH}
arch_short: ${ARCH_SHORT}
base: quay.io/pypa/manylinux_2_28_${ARCH_ALIAS}:2026.05.31-3
base: quay.io/pypa/manylinux_2_28_${ARCH_ALIAS}:2026.08.08-1
manylinux: 2_28
python: ${PYTHON}
python_abi_tag: ${PYTHON_ABI_TAG}
Expand All @@ -1203,7 +1203,7 @@ services:
args:
arch: ${ARCH}
arch_short: ${ARCH_SHORT}
base: quay.io/pypa/musllinux_1_2_${ARCH_ALIAS}:2026.05.31-3
base: quay.io/pypa/musllinux_1_2_${ARCH_ALIAS}:2026.08.08-1
musllinux: 1_2
python: ${PYTHON}
python_abi_tag: ${PYTHON_ABI_TAG}
Expand Down Expand Up @@ -1244,7 +1244,7 @@ services:
args:
base: "alpine:${ALPINE_LINUX}"
python_version: ${PYTHON}
build_date: "20260510" # python-build-standalone release date
build_date: "20260807" # python-build-standalone release date
arch: ${ARCH_ALIAS}
context: .
dockerfile: ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile
Expand Down Expand Up @@ -1288,7 +1288,7 @@ services:
args:
base: "alpine:${ALPINE_LINUX}"
python_version: ${PYTHON}
build_date: "20260510" # python-build-standalone release date
build_date: "20260807" # python-build-standalone release date
arch: ${ARCH_ALIAS}
context: .
dockerfile: ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile
Expand Down
7 changes: 6 additions & 1 deletion dev/tasks/python-wheels/github.linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
{% endif %}
env:
{% if linux_wheel_kind == "musllinux" %}
ALPINE_LINUX: "3.22"
ALPINE_LINUX: "3.23"
{% endif %}
# archery uses these environment variables
{% if arch == "amd64" %}
Expand All @@ -42,7 +42,12 @@ jobs:
{% endif %}
PYTHON: "{{ python_version }}"
PYTHON_ABI_TAG: "{{ python_abi_tag }}"
{% if python_version == "3.15" %}
# TODO: Remove -rc suffix after 3.15 release
PYTHON_IMAGE_TAG: "{{ python_version }}-rc"
{% else %}
PYTHON_IMAGE_TAG: "{{ python_version }}"
{% endif %}

steps:
{{ macros.github_checkout_arrow()|indent }}
Expand Down
5 changes: 4 additions & 1 deletion dev/tasks/tasks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,10 @@ tasks:
("3.12", "cp312", "cp312"),
("3.13", "cp313", "cp313"),
("3.14", "cp314", "cp314"),
("3.14", "cp314", "cp314t")] %}
("3.14", "cp314", "cp314t"),
("3.15", "cp315", "cp315"),
("3.15", "cp315", "cp315t")
] %}

{############################## Wheel Linux ##################################}

Expand Down
2 changes: 1 addition & 1 deletion python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ requires = [
"scikit-build-core >= 1.0",
"cython >= 3.1",
# Needed for build-time stub docstring extraction
"libcst>=1.8.6",
"libcst>=1.9.0",
"numpy>=1.25",
"setuptools_scm[toml]>=8",
]
Expand Down
2 changes: 1 addition & 1 deletion python/requirements-build.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
build
cython>=3.1
libcst>=1.8.6
libcst>=1.9.0
numpy>=1.25
scikit-build-core>=1.0
setuptools_scm>=8
2 changes: 1 addition & 1 deletion python/requirements-test.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cffi
hypothesis
packaging
pandas
pandas; python_version < "3.15" # TODO: temporary - reenable when 3.15 wheels ship
pytest
pytest-xdist
pytz
Expand Down
2 changes: 1 addition & 1 deletion python/requirements-wheel-build.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
build
cython>=3.1
# Needed for build-time stub docstring extraction
libcst>=1.8.6
libcst>=1.9.0
numpy>=2.0.0
scikit-build-core>=1.0
setuptools_scm
Expand Down
5 changes: 3 additions & 2 deletions python/requirements-wheel-test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ numpy~=1.23.2; python_version < "3.11"
numpy~=1.23.2; python_version == "3.11"
numpy~=1.26.0; python_version == "3.12"
numpy~=2.1.0; python_version == "3.13"
numpy~=2.3.3; python_version >= "3.14"
numpy~=2.3.3; python_version == "3.14"
numpy~=2.5.2; python_version == "3.15" # TODO: 2.5.2 is for 3.15-rc1, after release, update to correct version

pandas
pandas; python_version < "3.15" # TODO: temporary - reenable when 3.15 wheels ship
Loading