From 892b855be87ca430fb10b7305d4a21d4cf89f592 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Tue, 28 Oct 2025 08:48:54 +0100 Subject: [PATCH 01/26] Update musllinux installs --- ...ed-wheel-musllinux-test-imports.dockerfile | 40 +++++++++---------- ...-wheel-musllinux-test-unittests.dockerfile | 38 +++++++++--------- compose.yaml | 4 ++ 3 files changed, 40 insertions(+), 42 deletions(-) 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 3168d54f2ed..2e8e4a3771e 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile @@ -17,40 +17,36 @@ ARG base FROM ${base} +ARG arch +FROM ${arch} +ARG build_date +FROM ${build_date} ARG python_version=3.13 -RUN apk add --no-cache \ +RUN apk update && \ + apk add --no-cache \ bash \ - build-base \ - bzip2-dev \ - g++ \ + curl \ git \ - libffi-dev \ - libnsl-dev \ - libtirpc-dev \ - linux-headers \ - ncurses-dev \ - openssl-dev \ - pkgconf \ + tar \ tzdata \ - zlib-dev + zstd -# Install Python without GIL +# Install Python with free-threading from python-build-standalone +# 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";; \ esac && \ - wget https://github.com/python/cpython/archive/refs/tags/v${python_patch_version}.tar.gz && \ - tar -xzf v${python_patch_version}.tar.gz && \ - rm v${python_patch_version}.tar.gz && \ - cd cpython-${python_patch_version}/ && \ - ./configure --disable-gil --with-ensurepip && \ - make -j && \ - make install && \ - cd ../ && \ - rm -rf cpython-${python_patch_version}/ + 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 && \ + mkdir -p /opt/python && \ + tar -xf python.tar.zst -C /opt/python --strip-components=1 && \ + rm python.tar.zst + +ENV PATH="/opt/python/install/bin:${PATH}" ENV ARROW_PYTHON_VENV /arrow-dev RUN python${python_version}t -m venv ${ARROW_PYTHON_VENV} 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 c6873612b86..430dcaf0143 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile @@ -17,40 +17,38 @@ ARG base FROM ${base} +ARG arch +FROM ${arch} +ARG build_date +FROM ${build_date} ARG python_version=3.13 -RUN apk add --no-cache \ +RUN apk update && \ + apk add --no-cache \ bash \ build-base \ - bzip2-dev \ + curl \ g++ \ git \ - libffi-dev \ - libnsl-dev \ - libtirpc-dev \ - linux-headers \ - ncurses-dev \ - openssl-dev \ - pkgconf \ + tar \ tzdata \ - zlib-dev + zstd -# Install Python without GIL +# Install Python with free-threading from python-build-standalone +# 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";; \ esac && \ - wget https://github.com/python/cpython/archive/refs/tags/v${python_patch_version}.tar.gz && \ - tar -xzf v${python_patch_version}.tar.gz && \ - rm v${python_patch_version}.tar.gz && \ - cd cpython-${python_patch_version}/ && \ - ./configure --disable-gil --with-ensurepip && \ - make -j && \ - make install && \ - cd ../ && \ - rm -rf cpython-${python_patch_version}/ + 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 && \ + mkdir -p /opt/python && \ + tar -xf python.tar.zst -C /opt/python --strip-components=1 && \ + rm python.tar.zst + +ENV PATH="/opt/python/install/bin:${PATH}" ENV ARROW_PYTHON_VENV /arrow-dev RUN python${python_version}t -m venv ${ARROW_PYTHON_VENV} diff --git a/compose.yaml b/compose.yaml index fcdcbe289c1..c8fbd93d133 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1228,6 +1228,8 @@ services: args: base: "${ARCH}/alpine:${ALPINE_LINUX}" python_version: ${PYTHON} + build_date: "20251014" # python-build-standalone release date + arch: ${ARCH_ALIAS} context: . dockerfile: ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile cache_from: @@ -1270,6 +1272,8 @@ services: args: base: "${ARCH}/alpine:${ALPINE_LINUX}" python_version: ${PYTHON} + build_date: "20251014" # python-build-standalone release date + arch: ${ARCH_ALIAS} context: . dockerfile: ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile cache_from: From 603f75b5c61fd04538f62a541d7dd50393490455 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Thu, 30 Oct 2025 09:43:06 +0100 Subject: [PATCH 02/26] Use default args --- ...free-threaded-wheel-musllinux-test-imports.dockerfile | 9 +++++---- ...ee-threaded-wheel-musllinux-test-unittests.dockerfile | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) 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 2e8e4a3771e..af7f0776ba0 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile @@ -17,10 +17,11 @@ ARG base FROM ${base} -ARG arch -FROM ${arch} -ARG build_date -FROM ${build_date} + +ARG python_version=3.13 +ARG python_patch_version=3.13.9 +ARG build_date=20251014 +ARG arch=aarch64 ARG python_version=3.13 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 430dcaf0143..46a8aafd1f0 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile @@ -17,10 +17,11 @@ ARG base FROM ${base} -ARG arch -FROM ${arch} -ARG build_date -FROM ${build_date} + +ARG python_version=3.13 +ARG python_patch_version=3.13.9 +ARG build_date=20251014 +ARG arch=aarch64 ARG python_version=3.13 From b6d5b69f4e7bc8e316e78f65c20bfa7b04bc9dee Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Wed, 5 Nov 2025 09:51:42 +0100 Subject: [PATCH 03/26] Update windows wheels dockerfiles to use MSIX --- ...e-threaded-wheel-windows-vs2022.dockerfile | 53 ------------------- .../python-wheel-windows-vs2022.dockerfile | 17 +++++- compose.yaml | 17 +----- 3 files changed, 17 insertions(+), 70 deletions(-) delete mode 100644 ci/docker/python-free-threaded-wheel-windows-vs2022.dockerfile diff --git a/ci/docker/python-free-threaded-wheel-windows-vs2022.dockerfile b/ci/docker/python-free-threaded-wheel-windows-vs2022.dockerfile deleted file mode 100644 index 77a64fd5c24..00000000000 --- a/ci/docker/python-free-threaded-wheel-windows-vs2022.dockerfile +++ /dev/null @@ -1,53 +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. - -# NOTE: You must update PYTHON_WHEEL_WINDOWS_IMAGE_REVISION in .env -# when you update this file. - -ARG base -# https://github.com/hadolint/hadolint/wiki/DL3006 -# (Hadolint does not expand variables and thinks '${base}' is an untagged image) -# hadolint ignore=DL3006 -FROM ${base} - -ARG python=3.13 - -RUN (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.1") & \ - (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0") - -SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] -RUN $version = $env:PYTHON_VERSION; \ - $filename = 'python-' + $version + '-amd64.exe'; \ - $url = 'https://www.python.org/ftp/python/' + $version + '/' + $filename; \ - Invoke-WebRequest -Uri $url -OutFile $filename; \ - Start-Process -FilePath $filename -ArgumentList '/quiet', 'Include_freethreaded=1' -Wait - -ENV PYTHON_CMD="py -${python}t" - -SHELL ["cmd", "/S", "/C"] -RUN %PYTHON_CMD% -m pip install -U pip setuptools - -COPY python/requirements-wheel-build.txt C:/arrow/python/ -# Cython wheels for 3.13 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 \ - cython -RUN %PYTHON_CMD% -m pip install -r C:/arrow/python/requirements-wheel-build.txt - -ENV PYTHON="${python}t" diff --git a/ci/docker/python-wheel-windows-vs2022.dockerfile b/ci/docker/python-wheel-windows-vs2022.dockerfile index 48d3937a0ed..b8674f5a87d 100644 --- a/ci/docker/python-wheel-windows-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022.dockerfile @@ -29,7 +29,22 @@ RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.9" && setx PYTHON_CMD "py -3.13") & \ (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") -RUN choco install -r -y --pre --no-progress python --version=%PYTHON_VERSION% +SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] +# Install Python install manager (MSIX) +RUN $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ + Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; \ + Add-AppxPackage .\python.msix + +# Use python_abi_tag env var to select regular or free-threaded Python +ARG python_abi_tag=cp310 +ENV PYTHON_ABI_TAG=${python_abi_tag} +RUN if ($env:PYTHON_ABI_TAG -match 't$') { \ + pymanager install --version $env:PYTHON_VERSION --variant freethreaded \ + } else { \ + pymanager install --version $env:PYTHON_VERSION \ + } + +SHELL ["cmd", "/S", "/C"] RUN %PYTHON_CMD% -m pip install -U pip setuptools COPY python/requirements-wheel-build.txt C:/arrow/python/ diff --git a/compose.yaml b/compose.yaml index c8fbd93d133..31343036795 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1388,6 +1388,7 @@ services: args: base: ${REPO}:python-wheel-windows-vs2022-base-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} python: ${PYTHON} + python_abi_tag: ${PYTHON_ABI_TAG} context: . dockerfile: ci/docker/python-wheel-windows-vs2022.dockerfile # This should make the pushed images reusable, but the image gets rebuilt. @@ -1398,22 +1399,6 @@ services: volumes: *python-wheel-windows-vs2022-volumes command: arrow\\ci\\scripts\\python_wheel_windows_build.bat - python-free-threaded-wheel-windows-vs2022: - image: ${REPO}:python-${PYTHON}-free-threaded-wheel-windows-vs2022-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} - build: - args: - base: ${REPO}:python-wheel-windows-vs2022-base-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} - python: ${PYTHON} - context: . - dockerfile: ci/docker/python-free-threaded-wheel-windows-vs2022.dockerfile - # This should make the pushed images reusable, but the image gets rebuilt. - # Uncomment if no local cache is available. - # cache_from: - # - mcr.microsoft.com/windows/servercore:ltsc2022 - # - ${REPO}:python-${PYTHON}-free-threaded-wheel-windows-vs2022-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} - volumes: *python-wheel-windows-vs2022-volumes - command: arrow\\ci\\scripts\\python_wheel_windows_build.bat - python-wheel-windows-test-base: image: ${REPO}:python-wheel-windows-test-vs2022-base-${PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION} build: From ddc9ae07b70f8365f3c5a6bb2b2a69e9c0dafe08 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Wed, 5 Nov 2025 09:54:26 +0100 Subject: [PATCH 04/26] Remove free threaded win wheels from services (only build, not test - todo) --- compose.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/compose.yaml b/compose.yaml index 31343036795..2d45454783a 100644 --- a/compose.yaml +++ b/compose.yaml @@ -176,7 +176,6 @@ x-hierarchy: - python-free-threaded-wheel-musllinux-test-unittests - python-wheel-windows-vs2022-base: - python-wheel-windows-vs2022 - - python-free-threaded-wheel-windows-vs2022 - python-wheel-windows-test-base: - python-wheel-windows-test - python-free-threaded-wheel-windows-test From c9013611372c1a03f3e06d03296c141c818b6b1f Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Wed, 5 Nov 2025 10:29:42 +0100 Subject: [PATCH 05/26] Bring bach win free-threaded service and only use the same dockerfile --- .../python-wheel-windows-vs2022.dockerfile | 6 +++--- compose.yaml | 20 ++++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/ci/docker/python-wheel-windows-vs2022.dockerfile b/ci/docker/python-wheel-windows-vs2022.dockerfile index b8674f5a87d..420ce3fdfb4 100644 --- a/ci/docker/python-wheel-windows-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022.dockerfile @@ -36,9 +36,9 @@ RUN $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ Add-AppxPackage .\python.msix # Use python_abi_tag env var to select regular or free-threaded Python -ARG python_abi_tag=cp310 -ENV PYTHON_ABI_TAG=${python_abi_tag} -RUN if ($env:PYTHON_ABI_TAG -match 't$') { \ +ARG freethreaded=0 +ENV PYTHON_MODE=${freethreaded} +RUN if ($env:PYTHON_MODE -eq '1') { \ pymanager install --version $env:PYTHON_VERSION --variant freethreaded \ } else { \ pymanager install --version $env:PYTHON_VERSION \ diff --git a/compose.yaml b/compose.yaml index 2d45454783a..0d9937dfe8f 100644 --- a/compose.yaml +++ b/compose.yaml @@ -176,6 +176,7 @@ x-hierarchy: - python-free-threaded-wheel-musllinux-test-unittests - python-wheel-windows-vs2022-base: - python-wheel-windows-vs2022 + - python-free-threaded-wheel-windows-vs2022 - python-wheel-windows-test-base: - python-wheel-windows-test - python-free-threaded-wheel-windows-test @@ -1387,7 +1388,7 @@ services: args: base: ${REPO}:python-wheel-windows-vs2022-base-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} python: ${PYTHON} - python_abi_tag: ${PYTHON_ABI_TAG} + freethreaded: 0 context: . dockerfile: ci/docker/python-wheel-windows-vs2022.dockerfile # This should make the pushed images reusable, but the image gets rebuilt. @@ -1398,6 +1399,23 @@ services: volumes: *python-wheel-windows-vs2022-volumes command: arrow\\ci\\scripts\\python_wheel_windows_build.bat + python-free-threaded-wheel-windows-vs2022: + image: ${REPO}:python-${PYTHON}-free-threaded-wheel-windows-vs2022-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} + build: + args: + base: ${REPO}:python-wheel-windows-vs2022-base-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} + python: ${PYTHON} + freethreaded: 1 + context: . + dockerfile: ci/docker/python-wheel-windows-vs2022.dockerfile + # This should make the pushed images reusable, but the image gets rebuilt. + # Uncomment if no local cache is available. + # cache_from: + # - mcr.microsoft.com/windows/servercore:ltsc2022 + # - ${REPO}:python-${PYTHON}-free-threaded-wheel-windows-vs2022-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} + volumes: *python-wheel-windows-vs2022-volumes + command: arrow\\ci\\scripts\\python_wheel_windows_build.bat + python-wheel-windows-test-base: image: ${REPO}:python-wheel-windows-test-vs2022-base-${PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION} build: From c1ac11d1d6fa5fd330a1e3acf8a7412476d058d6 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Wed, 5 Nov 2025 13:03:16 +0100 Subject: [PATCH 06/26] Update windows test wheels dockerfiles to use MSIX --- ...eaded-wheel-windows-test-vs2022.dockerfile | 59 ------------------- ...ython-wheel-windows-test-vs2022.dockerfile | 29 +++++++-- compose.yaml | 4 +- 3 files changed, 27 insertions(+), 65 deletions(-) delete mode 100644 ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile diff --git a/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile deleted file mode 100644 index ab257b271e5..00000000000 --- a/ci/docker/python-free-threaded-wheel-windows-test-vs2022.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. - -# NOTE: You must update PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION in .env -# when you update this file. - -ARG base -# https://github.com/hadolint/hadolint/wiki/DL3006 -# (Hadolint does not expand variables and thinks '${base}' is an untagged image) -# hadolint ignore=DL3006 -FROM ${base} - -ARG python=3.13 - -# hadolint ignore=SC1072 -RUN (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.1") & \ - (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0") - -SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] -RUN $version = $env:PYTHON_VERSION; \ - $filename = 'python-' + $version + '-amd64.exe'; \ - $url = 'https://www.python.org/ftp/python/' + $version + '/' + $filename; \ - Invoke-WebRequest -Uri $url -OutFile $filename; \ - Start-Process -FilePath $filename -ArgumentList '/quiet', 'Include_freethreaded=1' -Wait - -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/ -# 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% - -ENV PYTHON="${python}t" -ENV PYTHON_GIL=0 diff --git a/ci/docker/python-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-wheel-windows-test-vs2022.dockerfile index e5d1c517587..612bcb5e478 100644 --- a/ci/docker/python-wheel-windows-test-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022.dockerfile @@ -34,12 +34,31 @@ RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.9" && setx PYTHON_CMD "py -3.13") & \ (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") +SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] +# Install Python install manager (MSIX) +RUN $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ + Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; \ + Add-AppxPackage .\python.msix + +# Use python_abi_tag env var to select regular or free-threaded Python +ARG freethreaded=0 +ENV PYTHON_MODE=${freethreaded} +RUN if ($env:PYTHON_MODE -eq '1') { \ + pymanager install --version $env:PYTHON_VERSION --variant freethreaded \ + } else { \ + pymanager install --version $env:PYTHON_VERSION \ + } + +SHELL ["cmd", "/S", "/C"] # hadolint ignore=DL3059 -RUN choco install -r -y --pre --no-progress --force python --version=%PYTHON_VERSION% -# hadolint ignore=DL3059 -RUN %PYTHON_CMD% -m pip install -U pip setuptools +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.txt C:/arrow/python/ -RUN %PYTHON_CMD% -m pip install -r C:/arrow/python/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 -r C:/arrow/python/%REQUIREMENTS_FILE% ENV PYTHON=$python diff --git a/compose.yaml b/compose.yaml index 0d9937dfe8f..f4bbdb0d676 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1429,6 +1429,7 @@ services: args: base: ${REPO}:python-wheel-windows-test-vs2022-base-${PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION} python: ${PYTHON} + freethreaded: 0 context: . dockerfile: ci/docker/python-wheel-windows-test-vs2022.dockerfile volumes: *python-wheel-windows-vs2022-volumes @@ -1440,8 +1441,9 @@ services: args: base: ${REPO}:python-wheel-windows-test-vs2022-base-${PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION} python: ${PYTHON} + freethreaded: 1 context: . - dockerfile: ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile + dockerfile: ci/docker/python-wheel-windows-test-vs2022.dockerfile volumes: *python-wheel-windows-vs2022-volumes command: arrow\\ci\\scripts\\python_wheel_windows_test.bat From d6ffdd32841b7c3e1231e19b97932bfeb8496dbe Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Wed, 5 Nov 2025 15:47:55 +0100 Subject: [PATCH 07/26] Try moving install of MSIX to base dockerfile --- .../python-wheel-windows-test-vs2022.dockerfile | 17 +++++------------ .../python-wheel-windows-vs2022-base.dockerfile | 10 +++++++--- .../python-wheel-windows-vs2022.dockerfile | 17 +++++------------ 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-wheel-windows-test-vs2022.dockerfile index 612bcb5e478..7d983c78197 100644 --- a/ci/docker/python-wheel-windows-test-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022.dockerfile @@ -34,22 +34,15 @@ RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.9" && setx PYTHON_CMD "py -3.13") & \ (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") -SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] -# Install Python install manager (MSIX) -RUN $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ - Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; \ - Add-AppxPackage .\python.msix - # Use python_abi_tag env var to select regular or free-threaded Python ARG freethreaded=0 ENV PYTHON_MODE=${freethreaded} -RUN if ($env:PYTHON_MODE -eq '1') { \ - pymanager install --version $env:PYTHON_VERSION --variant freethreaded \ - } else { \ - pymanager install --version $env:PYTHON_VERSION \ - } +RUN if "%PYTHON_MODE%"=="1" ( \ + pymanager install --version %PYTHON_VERSION% --variant freethreaded \ + ) else ( \ + pymanager install --version %PYTHON_VERSION% \ + ) -SHELL ["cmd", "/S", "/C"] # hadolint ignore=DL3059 RUN %PYTHON_CMD% -m pip install -U pip setuptools & \ if "%python%"=="3.13" ( \ diff --git a/ci/docker/python-wheel-windows-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-vs2022-base.dockerfile index 99dd27b987a..16ffbd55b44 100644 --- a/ci/docker/python-wheel-windows-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022-base.dockerfile @@ -74,13 +74,17 @@ RUN ` # Install choco CLI # -# Switch into Powershell just for this command because choco only provides a -# Powershell installation script. After, we switch back to cmd. +# Switch into Powershell just for this command because choco and Python install manager (MSIX) +# only provide a Powershell installation script. After, we switch back to cmd. # # See https://chocolatey.org/install#completely-offline-install SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ` - Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) & \ + $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ + Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; \ + Add-AppxPackage .\python.msix + SHELL ["cmd", "/S", "/C"] # Install CMake and other tools diff --git a/ci/docker/python-wheel-windows-vs2022.dockerfile b/ci/docker/python-wheel-windows-vs2022.dockerfile index 420ce3fdfb4..a0e9e796a8e 100644 --- a/ci/docker/python-wheel-windows-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022.dockerfile @@ -29,22 +29,15 @@ RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.9" && setx PYTHON_CMD "py -3.13") & \ (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") -SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] -# Install Python install manager (MSIX) -RUN $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ - Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; \ - Add-AppxPackage .\python.msix - # Use python_abi_tag env var to select regular or free-threaded Python ARG freethreaded=0 ENV PYTHON_MODE=${freethreaded} -RUN if ($env:PYTHON_MODE -eq '1') { \ - pymanager install --version $env:PYTHON_VERSION --variant freethreaded \ - } else { \ - pymanager install --version $env:PYTHON_VERSION \ - } +RUN if "%PYTHON_MODE%"=="1" ( \ + pymanager install --version %PYTHON_VERSION% --variant freethreaded \ + ) else ( \ + pymanager install --version %PYTHON_VERSION% \ + ) -SHELL ["cmd", "/S", "/C"] RUN %PYTHON_CMD% -m pip install -U pip setuptools COPY python/requirements-wheel-build.txt C:/arrow/python/ From 836718a92e719dd3de12c2280c3be081c2d39d4b Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Thu, 6 Nov 2025 10:48:26 +0100 Subject: [PATCH 08/26] Add MSIX to the test base dockerfile also --- ci/docker/python-wheel-windows-test-vs2022-base.dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile index bd1da7b14b3..bd48e5b3bea 100644 --- a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile @@ -46,7 +46,10 @@ RUN ` # See https://chocolatey.org/install#completely-offline-install SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ` - Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) & \ + $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ + Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; \ + Add-AppxPackage .\python.msix SHELL ["cmd", "/S", "/C"] # Install git, wget, minio From b773837e97eefb3a18a49549066dca24eb56c2ae Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Thu, 6 Nov 2025 12:27:47 +0100 Subject: [PATCH 09/26] Use proper powershell syntax --- .../python-wheel-windows-test-vs2022-base.dockerfile | 8 +++++--- ci/docker/python-wheel-windows-vs2022-base.dockerfile | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile index bd48e5b3bea..bcfa564f08b 100644 --- a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile @@ -46,9 +46,11 @@ RUN ` # See https://chocolatey.org/install#completely-offline-install SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ` - Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) & \ - $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ - Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; \ + Set-ExecutionPolicy Bypass -Scope Process -Force; ` + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` + iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')); ` + $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; ` + Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; ` Add-AppxPackage .\python.msix SHELL ["cmd", "/S", "/C"] diff --git a/ci/docker/python-wheel-windows-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-vs2022-base.dockerfile index 16ffbd55b44..179ff9337e2 100644 --- a/ci/docker/python-wheel-windows-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022-base.dockerfile @@ -80,9 +80,11 @@ RUN ` # See https://chocolatey.org/install#completely-offline-install SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ` - Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) & \ - $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; \ - Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; \ + Set-ExecutionPolicy Bypass -Scope Process -Force; ` + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` + iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')); ` + $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; ` + Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; ` Add-AppxPackage .\python.msix SHELL ["cmd", "/S", "/C"] From 8dbd304439c049dd934fa32b44707b8d1278bc0c Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Thu, 6 Nov 2025 15:28:23 +0100 Subject: [PATCH 10/26] Try if curl works --- ci/docker/python-wheel-windows-test-vs2022-base.dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile index bcfa564f08b..b0007e48536 100644 --- a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile @@ -49,8 +49,7 @@ RUN ` Set-ExecutionPolicy Bypass -Scope Process -Force; ` [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')); ` - $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; ` - Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; ` + curl -L -o python.msix https://www.python.org/ftp/python/installer/python.msix; ` Add-AppxPackage .\python.msix SHELL ["cmd", "/S", "/C"] From e9d67d591bff374f7b3ef64671ea1dd4ac63d231 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Thu, 6 Nov 2025 19:30:15 +0100 Subject: [PATCH 11/26] Move curl command outside Poweshell --- ci/docker/python-wheel-windows-test-vs2022-base.dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile index b0007e48536..5c3cb33fd42 100644 --- a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile @@ -40,7 +40,10 @@ RUN ` || IF "%ERRORLEVEL%"=="3010" EXIT 0) ` && del /q vs_buildtools.exe -# Install choco CLI +# Download python.msix +RUN curl -L -o python.msix https://www.python.org/ftp/python/installer/python.msix + +# Install choco CLI and MSIX package # # We switch into Powershell just for this command and switch back to cmd # See https://chocolatey.org/install#completely-offline-install @@ -49,7 +52,6 @@ RUN ` Set-ExecutionPolicy Bypass -Scope Process -Force; ` [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')); ` - curl -L -o python.msix https://www.python.org/ftp/python/installer/python.msix; ` Add-AppxPackage .\python.msix SHELL ["cmd", "/S", "/C"] From ecda84db8aef32be9e87a7b4e8f1785138e491ab Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 7 Nov 2025 08:39:26 +0100 Subject: [PATCH 12/26] Change url and decouple choco and pymanager install --- ...-wheel-windows-test-vs2022-base.dockerfile | 24 ++++++++++++------- ...ython-wheel-windows-vs2022-base.dockerfile | 16 +++++++++---- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile index 5c3cb33fd42..849bf61121f 100644 --- a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile @@ -40,19 +40,25 @@ RUN ` || IF "%ERRORLEVEL%"=="3010" EXIT 0) ` && del /q vs_buildtools.exe -# Download python.msix -RUN curl -L -o python.msix https://www.python.org/ftp/python/installer/python.msix - -# Install choco CLI and MSIX package +# Install choco CLI # -# We switch into Powershell just for this command and switch back to cmd +# We switch into Powershell just for this two commands and switch back to cmd # See https://chocolatey.org/install#completely-offline-install SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ` - Set-ExecutionPolicy Bypass -Scope Process -Force; ` - [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` - iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')); ` - Add-AppxPackage .\python.msix + Set-ExecutionPolicy Bypass -Scope Process -Force; ` + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` + iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + +# Install the Python install manager +# +# See https://docs.python.org/dev/using/windows.html#python-install-manager and +# https://www.python.org/ftp/python/pymanager/ +RUN ` + $pymanager_url = 'https://www.python.org/ftp/python/pymanager/python-manager-25.0.msix'; ` + Invoke-WebRequest -Uri $pymanager_url -OutFile 'C:\Windows\pymanager.msix'; ` + Add-AppxPackage C:\Windows\pymanager.msix + SHELL ["cmd", "/S", "/C"] # Install git, wget, minio diff --git a/ci/docker/python-wheel-windows-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-vs2022-base.dockerfile index 179ff9337e2..5457a5ecd9e 100644 --- a/ci/docker/python-wheel-windows-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022-base.dockerfile @@ -75,17 +75,23 @@ RUN ` # Install choco CLI # # Switch into Powershell just for this command because choco and Python install manager (MSIX) -# only provide a Powershell installation script. After, we switch back to cmd. +# only provide a Powershell installation scripts. After, we switch back to cmd. # # See https://chocolatey.org/install#completely-offline-install SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ` Set-ExecutionPolicy Bypass -Scope Process -Force; ` [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` - iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')); ` - $msix_url = 'https://www.python.org/ftp/python/installer/python.msix'; ` - Invoke-WebRequest -Uri $msix_url -OutFile 'python.msix'; ` - Add-AppxPackage .\python.msix + iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + +# Install the Python install manager +# +# See https://docs.python.org/dev/using/windows.html#python-install-manager and +# https://www.python.org/ftp/python/pymanager/ +RUN ` + $pymanager_url = 'https://www.python.org/ftp/python/pymanager/python-manager-25.0.msix'; ` + Invoke-WebRequest -Uri $pymanager_url -OutFile 'C:\Windows\pymanager.msix'; ` + Add-AppxPackage C:\Windows\pymanager.msix SHELL ["cmd", "/S", "/C"] From bf5c373f4bbccc67514f14e72a04614f6dc01c2a Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 7 Nov 2025 10:59:53 +0100 Subject: [PATCH 13/26] Revert "Update windows test wheels dockerfiles to use MSIX" This reverts commit 6c57b1dafa4a87931f6d9358e8c5730825722ae7. --- ...eaded-wheel-windows-test-vs2022.dockerfile | 59 +++++++++++++++++++ ...ython-wheel-windows-test-vs2022.dockerfile | 22 ++----- compose.yaml | 4 +- 3 files changed, 65 insertions(+), 20 deletions(-) create mode 100644 ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile diff --git a/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile new file mode 100644 index 00000000000..ab257b271e5 --- /dev/null +++ b/ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile @@ -0,0 +1,59 @@ +# 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. + +# NOTE: You must update PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION in .env +# when you update this file. + +ARG base +# https://github.com/hadolint/hadolint/wiki/DL3006 +# (Hadolint does not expand variables and thinks '${base}' is an untagged image) +# hadolint ignore=DL3006 +FROM ${base} + +ARG python=3.13 + +# hadolint ignore=SC1072 +RUN (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.1") & \ + (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0") + +SHELL ["powershell", "-NoProfile", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] +RUN $version = $env:PYTHON_VERSION; \ + $filename = 'python-' + $version + '-amd64.exe'; \ + $url = 'https://www.python.org/ftp/python/' + $version + '/' + $filename; \ + Invoke-WebRequest -Uri $url -OutFile $filename; \ + Start-Process -FilePath $filename -ArgumentList '/quiet', 'Include_freethreaded=1' -Wait + +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/ +# 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% + +ENV PYTHON="${python}t" +ENV PYTHON_GIL=0 diff --git a/ci/docker/python-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-wheel-windows-test-vs2022.dockerfile index 7d983c78197..e5d1c517587 100644 --- a/ci/docker/python-wheel-windows-test-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022.dockerfile @@ -34,24 +34,12 @@ RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.9" && setx PYTHON_CMD "py -3.13") & \ (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") -# Use python_abi_tag env var to select regular or free-threaded Python -ARG freethreaded=0 -ENV PYTHON_MODE=${freethreaded} -RUN if "%PYTHON_MODE%"=="1" ( \ - pymanager install --version %PYTHON_VERSION% --variant freethreaded \ - ) else ( \ - pymanager install --version %PYTHON_VERSION% \ - ) - # hadolint ignore=DL3059 -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" \ - ) +RUN choco install -r -y --pre --no-progress --force python --version=%PYTHON_VERSION% +# hadolint ignore=DL3059 +RUN %PYTHON_CMD% -m pip install -U pip setuptools -COPY python/requirements-wheel-test-3.13t.txt python/requirements-wheel-test.txt C:/arrow/python/ -RUN %PYTHON_CMD% -m pip install -r C:/arrow/python/%REQUIREMENTS_FILE% +COPY python/requirements-wheel-test.txt C:/arrow/python/ +RUN %PYTHON_CMD% -m pip install -r C:/arrow/python/requirements-wheel-test.txt ENV PYTHON=$python diff --git a/compose.yaml b/compose.yaml index f4bbdb0d676..0d9937dfe8f 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1429,7 +1429,6 @@ services: args: base: ${REPO}:python-wheel-windows-test-vs2022-base-${PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION} python: ${PYTHON} - freethreaded: 0 context: . dockerfile: ci/docker/python-wheel-windows-test-vs2022.dockerfile volumes: *python-wheel-windows-vs2022-volumes @@ -1441,9 +1440,8 @@ services: args: base: ${REPO}:python-wheel-windows-test-vs2022-base-${PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION} python: ${PYTHON} - freethreaded: 1 context: . - dockerfile: ci/docker/python-wheel-windows-test-vs2022.dockerfile + dockerfile: ci/docker/python-free-threaded-wheel-windows-test-vs2022.dockerfile volumes: *python-wheel-windows-vs2022-volumes command: arrow\\ci\\scripts\\python_wheel_windows_test.bat From d13d7ddbaadda203948ca4238972fc6b45dc57c6 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 7 Nov 2025 11:02:40 +0100 Subject: [PATCH 14/26] Remove pymanager install from base test dockerfile --- .../python-wheel-windows-test-vs2022-base.dockerfile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile index 849bf61121f..ece8804270b 100644 --- a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile @@ -50,15 +50,6 @@ RUN ` [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) -# Install the Python install manager -# -# See https://docs.python.org/dev/using/windows.html#python-install-manager and -# https://www.python.org/ftp/python/pymanager/ -RUN ` - $pymanager_url = 'https://www.python.org/ftp/python/pymanager/python-manager-25.0.msix'; ` - Invoke-WebRequest -Uri $pymanager_url -OutFile 'C:\Windows\pymanager.msix'; ` - Add-AppxPackage C:\Windows\pymanager.msix - SHELL ["cmd", "/S", "/C"] # Install git, wget, minio From 730729f63077c787c98cdfe188b2370e0aefb7ca Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 7 Nov 2025 11:04:37 +0100 Subject: [PATCH 15/26] Revert unnecessary changes on the choco install in base test --- ci/docker/python-wheel-windows-test-vs2022-base.dockerfile | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile index ece8804270b..05db8cd5723 100644 --- a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile @@ -42,14 +42,11 @@ RUN ` # Install choco CLI # -# We switch into Powershell just for this two commands and switch back to cmd +# We switch into Powershell just for this command and switch back to cmd # See https://chocolatey.org/install#completely-offline-install SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ` - Set-ExecutionPolicy Bypass -Scope Process -Force; ` - [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; ` - iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) - + Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) SHELL ["cmd", "/S", "/C"] # Install git, wget, minio From 59dce602e1ed93ed60acdedeca3b40f9e7207fe8 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 7 Nov 2025 14:21:10 +0100 Subject: [PATCH 16/26] Fix wrong tab --- ci/docker/python-wheel-windows-test-vs2022-base.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile index 05db8cd5723..bd1da7b14b3 100644 --- a/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022-base.dockerfile @@ -46,7 +46,7 @@ RUN ` # See https://chocolatey.org/install#completely-offline-install SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN ` - Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) SHELL ["cmd", "/S", "/C"] # Install git, wget, minio From 834d8cb00037f31e37b7bd5f1afa95213606a9b2 Mon Sep 17 00:00:00 2001 From: Alenka Frim Date: Mon, 10 Nov 2025 09:18:02 +0100 Subject: [PATCH 17/26] Update ci/docker/python-wheel-windows-vs2022-base.dockerfile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Raúl Cumplido --- ci/docker/python-wheel-windows-vs2022-base.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker/python-wheel-windows-vs2022-base.dockerfile b/ci/docker/python-wheel-windows-vs2022-base.dockerfile index 5457a5ecd9e..e63b8fc9945 100644 --- a/ci/docker/python-wheel-windows-vs2022-base.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022-base.dockerfile @@ -74,7 +74,7 @@ RUN ` # Install choco CLI # -# Switch into Powershell just for this command because choco and Python install manager (MSIX) +# Switch into Powershell just for the following commands because choco and Python install manager (MSIX) # only provide a Powershell installation scripts. After, we switch back to cmd. # # See https://chocolatey.org/install#completely-offline-install From 080f9a46ba5ce9e84fad0add15903ce1c4fc5d61 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Mon, 10 Nov 2025 09:24:56 +0100 Subject: [PATCH 18/26] Remove duplicated rows --- ...python-free-threaded-wheel-musllinux-test-imports.dockerfile | 2 -- ...thon-free-threaded-wheel-musllinux-test-unittests.dockerfile | 2 -- 2 files changed, 4 deletions(-) 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 af7f0776ba0..c2deef14064 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile @@ -23,8 +23,6 @@ ARG python_patch_version=3.13.9 ARG build_date=20251014 ARG arch=aarch64 -ARG python_version=3.13 - RUN apk update && \ apk add --no-cache \ bash \ 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 46a8aafd1f0..18c2d156c17 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile @@ -23,8 +23,6 @@ ARG python_patch_version=3.13.9 ARG build_date=20251014 ARG arch=aarch64 -ARG python_version=3.13 - RUN apk update && \ apk add --no-cache \ bash \ From 258bf1e0b9c3aabdd2deeb03df9680bab5c57f65 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Wed, 3 Dec 2025 09:13:39 +0100 Subject: [PATCH 19/26] Try removing defaults already parametered --- ...python-free-threaded-wheel-musllinux-test-imports.dockerfile | 2 -- ...thon-free-threaded-wheel-musllinux-test-unittests.dockerfile | 2 -- 2 files changed, 4 deletions(-) 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 c2deef14064..5c620e09d66 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile @@ -19,8 +19,6 @@ ARG base FROM ${base} ARG python_version=3.13 -ARG python_patch_version=3.13.9 -ARG build_date=20251014 ARG arch=aarch64 RUN apk update && \ 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 18c2d156c17..57d094cc2a9 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile @@ -19,8 +19,6 @@ ARG base FROM ${base} ARG python_version=3.13 -ARG python_patch_version=3.13.9 -ARG build_date=20251014 ARG arch=aarch64 RUN apk update && \ From 52ac61e6a9b1c86e5c10eb2082bd63860cb61879 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Wed, 3 Dec 2025 09:21:04 +0100 Subject: [PATCH 20/26] Remove mapping to patch versions --- ci/docker/python-wheel-windows-test-vs2022.dockerfile | 5 ----- ci/docker/python-wheel-windows-vs2022.dockerfile | 5 ----- 2 files changed, 10 deletions(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-wheel-windows-test-vs2022.dockerfile index e5d1c517587..ba2e358c742 100644 --- a/ci/docker/python-wheel-windows-test-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022.dockerfile @@ -28,11 +28,6 @@ FROM ${base} # Define the full version number otherwise choco falls back to patch number 0 (3.10 => 3.10.0) ARG python=3.10 -RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py -3.10") & \ - (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.9" && setx PYTHON_CMD "py -3.13") & \ - (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") # hadolint ignore=DL3059 RUN choco install -r -y --pre --no-progress --force python --version=%PYTHON_VERSION% diff --git a/ci/docker/python-wheel-windows-vs2022.dockerfile b/ci/docker/python-wheel-windows-vs2022.dockerfile index a0e9e796a8e..7939668ea73 100644 --- a/ci/docker/python-wheel-windows-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022.dockerfile @@ -23,11 +23,6 @@ FROM ${base} # Define the full version number otherwise choco falls back to patch number 0 (3.10 => 3.10.0) ARG python=3.10 -RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py -3.10") & \ - (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.9" && setx PYTHON_CMD "py -3.13") & \ - (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") # Use python_abi_tag env var to select regular or free-threaded Python ARG freethreaded=0 From 0450baff092154b932c8fbf7a24b55f8ef331014 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Wed, 3 Dec 2025 10:16:57 +0100 Subject: [PATCH 21/26] Include python_variant suggestion --- ci/docker/python-wheel-windows-vs2022.dockerfile | 10 +++------- compose.yaml | 4 ++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/ci/docker/python-wheel-windows-vs2022.dockerfile b/ci/docker/python-wheel-windows-vs2022.dockerfile index 7939668ea73..9ce0fe31317 100644 --- a/ci/docker/python-wheel-windows-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022.dockerfile @@ -25,13 +25,9 @@ FROM ${base} ARG python=3.10 # Use python_abi_tag env var to select regular or free-threaded Python -ARG freethreaded=0 -ENV PYTHON_MODE=${freethreaded} -RUN if "%PYTHON_MODE%"=="1" ( \ - pymanager install --version %PYTHON_VERSION% --variant freethreaded \ - ) else ( \ - pymanager install --version %PYTHON_VERSION% \ - ) +ARG python_variant=default +ENV PYTHON_VARIANT=${python_variant} +RUN pymanager install --version %PYTHON_VERSION% --variant %PYTHON_VARIANT% RUN %PYTHON_CMD% -m pip install -U pip setuptools diff --git a/compose.yaml b/compose.yaml index 0d9937dfe8f..84481e1af76 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1388,7 +1388,7 @@ services: args: base: ${REPO}:python-wheel-windows-vs2022-base-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} python: ${PYTHON} - freethreaded: 0 + python_variant: default context: . dockerfile: ci/docker/python-wheel-windows-vs2022.dockerfile # This should make the pushed images reusable, but the image gets rebuilt. @@ -1405,7 +1405,7 @@ services: args: base: ${REPO}:python-wheel-windows-vs2022-base-vcpkg-${VCPKG}-${PYTHON_WHEEL_WINDOWS_IMAGE_REVISION} python: ${PYTHON} - freethreaded: 1 + python_variant: freethreaded context: . dockerfile: ci/docker/python-wheel-windows-vs2022.dockerfile # This should make the pushed images reusable, but the image gets rebuilt. From 2c9e5329112644b6c678ac9a8d0c791a5b06ccd5 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Thu, 4 Dec 2025 13:01:17 +0100 Subject: [PATCH 22/26] Add build_date arg --- .../python-free-threaded-wheel-musllinux-test-imports.dockerfile | 1 + ...ython-free-threaded-wheel-musllinux-test-unittests.dockerfile | 1 + 2 files changed, 2 insertions(+) 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 5c620e09d66..e2e4eb8f991 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-imports.dockerfile @@ -20,6 +20,7 @@ FROM ${base} ARG python_version=3.13 ARG arch=aarch64 +ARG build_date RUN apk update && \ apk add --no-cache \ 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 57d094cc2a9..53ae58c7933 100644 --- a/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile +++ b/ci/docker/python-free-threaded-wheel-musllinux-test-unittests.dockerfile @@ -20,6 +20,7 @@ FROM ${base} ARG python_version=3.13 ARG arch=aarch64 +ARG build_date RUN apk update && \ apk add --no-cache \ From b0d30cbc2792ab354c2dd756c4c3ae0631d9cbe8 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 5 Dec 2025 11:05:22 +0100 Subject: [PATCH 23/26] Fix win dockerfile --- ci/docker/python-wheel-windows-vs2022.dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ci/docker/python-wheel-windows-vs2022.dockerfile b/ci/docker/python-wheel-windows-vs2022.dockerfile index 9ce0fe31317..4f71352eaca 100644 --- a/ci/docker/python-wheel-windows-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022.dockerfile @@ -26,12 +26,13 @@ ARG python=3.10 # Use python_abi_tag env var to select regular or free-threaded Python ARG python_variant=default +ENV PYTHON_VERSION=${python} ENV PYTHON_VARIANT=${python_variant} RUN pymanager install --version %PYTHON_VERSION% --variant %PYTHON_VARIANT% -RUN %PYTHON_CMD% -m pip install -U pip setuptools +RUN py -%PYTHON_VERSION% -m pip install -U pip setuptools COPY python/requirements-wheel-build.txt C:/arrow/python/ -RUN %PYTHON_CMD% -m pip install -r C:/arrow/python/requirements-wheel-build.txt +RUN py -%PYTHON_VERSION% -m pip install -r C:/arrow/python/requirements-wheel-build.txt ENV PYTHON=${python} From b4b42fbf32730a538228c741d985d5b8c4ac7b6d Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 5 Dec 2025 12:27:11 +0100 Subject: [PATCH 24/26] Fix error - win test still using choco not pymanager --- ci/docker/python-wheel-windows-test-vs2022.dockerfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-wheel-windows-test-vs2022.dockerfile index ba2e358c742..cc29f1d7f05 100644 --- a/ci/docker/python-wheel-windows-test-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022.dockerfile @@ -28,6 +28,11 @@ FROM ${base} # Define the full version number otherwise choco falls back to patch number 0 (3.10 => 3.10.0) ARG python=3.10 +RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py -3.10") & \ + (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.7" && setx PYTHON_CMD "py -3.13") & \ + (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") # hadolint ignore=DL3059 RUN choco install -r -y --pre --no-progress --force python --version=%PYTHON_VERSION% @@ -37,4 +42,4 @@ RUN %PYTHON_CMD% -m pip install -U pip setuptools COPY python/requirements-wheel-test.txt C:/arrow/python/ RUN %PYTHON_CMD% -m pip install -r C:/arrow/python/requirements-wheel-test.txt -ENV PYTHON=$python +ENV PYTHON=${python} From a356a46da7b8903503b78c550aa8a3055d513d6b Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 5 Dec 2025 12:27:50 +0100 Subject: [PATCH 25/26] Fix typo --- ci/docker/python-wheel-windows-test-vs2022.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker/python-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-wheel-windows-test-vs2022.dockerfile index cc29f1d7f05..73a9e167fea 100644 --- a/ci/docker/python-wheel-windows-test-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022.dockerfile @@ -31,7 +31,7 @@ ARG python=3.10 RUN (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PYTHON_CMD "py -3.10") & \ (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.7" && setx PYTHON_CMD "py -3.13") & \ + (if "%python%"=="3.13" setx PYTHON_VERSION "3.13.9" && setx PYTHON_CMD "py -3.13") & \ (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") # hadolint ignore=DL3059 From cf0c16911f86f24ef56768c8d80cf68d6eacb1d9 Mon Sep 17 00:00:00 2001 From: AlenkaF Date: Fri, 12 Dec 2025 08:51:00 +0100 Subject: [PATCH 26/26] Remove old comment --- ci/docker/python-wheel-windows-vs2022.dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/docker/python-wheel-windows-vs2022.dockerfile b/ci/docker/python-wheel-windows-vs2022.dockerfile index 4f71352eaca..d4d5e57cd2c 100644 --- a/ci/docker/python-wheel-windows-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022.dockerfile @@ -24,7 +24,6 @@ FROM ${base} # Define the full version number otherwise choco falls back to patch number 0 (3.10 => 3.10.0) ARG python=3.10 -# Use python_abi_tag env var to select regular or free-threaded Python ARG python_variant=default ENV PYTHON_VERSION=${python} ENV PYTHON_VARIANT=${python_variant}