diff --git a/.env b/.env index 980dc243b83f..44b9db8aef02 100644 --- a/.env +++ b/.env @@ -72,9 +72,9 @@ NUMBA=latest NUMBA_CUDA=latest NUMPY=latest PANDAS=latest -PYTHON=3.10 -PYTHON_IMAGE_TAG=3.10 -PYTHON_ABI_TAG=cp310 +PYTHON=3.11 +PYTHON_IMAGE_TAG=3.11 +PYTHON_ABI_TAG=cp311 R=4.5 SPARK=master diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index a86db37c9328..30e6272fb31b 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -66,36 +66,36 @@ jobs: matrix: name: - conda-python-docs - - conda-python-3.11-nopandas - - conda-python-3.10-pandas-1.3.4 - - conda-python-3.13-pandas-latest - - conda-python-3.12-no-numpy + - conda-python-3.12-nopandas + - conda-python-3.11-pandas-1.5.2 + - conda-python-3.14-pandas-latest + - conda-python-3.13-no-numpy include: - name: conda-python-docs image: conda-python-docs - title: AMD64 Conda Python 3.11 Sphinx & Numpydoc - python: "3.11" - - name: conda-python-3.11-nopandas + title: AMD64 Conda Python 3.12 Sphinx & Numpydoc + python: "3.12" + - name: conda-python-3.12-nopandas image: conda-python - title: AMD64 Conda Python 3.11 Without Pandas - python: "3.11" - - name: conda-python-3.10-pandas-1.3.4 + title: AMD64 Conda Python 3.12 Without Pandas + python: "3.12" + - name: conda-python-3.11-pandas-1.5.2 image: conda-python-pandas - title: AMD64 Conda Python 3.10 Pandas 1.3.4 - python: "3.10" - pandas: "1.3.4" - numpy: "1.21.2" - - name: conda-python-3.13-pandas-latest + title: AMD64 Conda Python 3.11 Pandas 1.5.2 + python: "3.11" + pandas: "1.5.2" + numpy: "1.23.2" + - name: conda-python-3.14-pandas-latest image: conda-python-pandas - title: AMD64 Conda Python 3.13 Pandas latest - python: "3.13" + title: AMD64 Conda Python 3.14 Pandas latest + python: "3.14" pandas: latest - - name: conda-python-3.12-no-numpy + - name: conda-python-3.13-no-numpy image: conda-python-no-numpy - title: AMD64 Conda Python 3.12 without NumPy - python: "3.12" + title: AMD64 Conda Python 3.13 without NumPy + python: "3.13" env: - PYTHON: ${{ matrix.python || 3.10 }} + PYTHON: ${{ matrix.python || 3.11 }} UBUNTU: ${{ matrix.ubuntu || 22.04 }} PANDAS: ${{ matrix.pandas || 'latest' }} NUMPY: ${{ matrix.numpy || 'latest' }} diff --git a/ci/docker/conda-cpp.dockerfile b/ci/docker/conda-cpp.dockerfile index 474c18a9ade5..4340a18f6eea 100644 --- a/ci/docker/conda-cpp.dockerfile +++ b/ci/docker/conda-cpp.dockerfile @@ -23,9 +23,7 @@ FROM --platform=linux/${arch} ${repo}:${arch_short}-conda COPY ci/scripts/install_minio.sh /arrow/ci/scripts RUN /arrow/ci/scripts/install_minio.sh latest /opt/conda -# Unless overridden use Python 3.10 -# Google GCS fails building with Python 3.11 at the moment. -ARG python=3.10 +ARG python=3.11 # install the required conda packages into the test environment # use `mold` to work around issues with GNU `ld` (GH-47015). diff --git a/ci/docker/conda-python-cpython-debug.dockerfile b/ci/docker/conda-python-cpython-debug.dockerfile index daa6c51c6bf6..d8da1d3a892f 100644 --- a/ci/docker/conda-python-cpython-debug.dockerfile +++ b/ci/docker/conda-python-cpython-debug.dockerfile @@ -17,11 +17,11 @@ ARG repo ARG arch -ARG python=3.10 +ARG python=3.11 FROM ${repo}:${arch}-conda-python-${python} # (Docker oddity: ARG needs to be repeated after FROM) -ARG python=3.10 +ARG python=3.11 RUN mamba install -c conda-forge/label/python_debug cpython "python=${python}[build=*_debug_*]" && \ mamba clean --all --yes # Quick check that we do have a debug mode CPython diff --git a/ci/docker/conda-python-dask.dockerfile b/ci/docker/conda-python-dask.dockerfile index 6991f1008602..37fca16f2128 100644 --- a/ci/docker/conda-python-dask.dockerfile +++ b/ci/docker/conda-python-dask.dockerfile @@ -18,7 +18,7 @@ ARG repo ARG arch ARG arch_short -ARG python=3.10 +ARG python=3.11 FROM --platform=linux/${arch} ${repo}:${arch_short}-conda-python-${python} ARG dask=latest diff --git a/ci/docker/conda-python-hdfs.dockerfile b/ci/docker/conda-python-hdfs.dockerfile index 263b38eaa587..85311c8fa1f7 100644 --- a/ci/docker/conda-python-hdfs.dockerfile +++ b/ci/docker/conda-python-hdfs.dockerfile @@ -18,7 +18,7 @@ ARG repo ARG arch ARG arch_short -ARG python=3.10 +ARG python=3.11 FROM --platform=linux/${arch} ${repo}:${arch_short}-conda-python-${python} ARG jdk=11 diff --git a/ci/docker/conda-python-jpype.dockerfile b/ci/docker/conda-python-jpype.dockerfile index d5aa747b861d..1c5b29856f4c 100644 --- a/ci/docker/conda-python-jpype.dockerfile +++ b/ci/docker/conda-python-jpype.dockerfile @@ -18,7 +18,7 @@ ARG repo ARG arch ARG arch_short -ARG python=3.10 +ARG python=3.11 FROM --platform=linux/${arch} ${repo}:${arch_short}-conda-python-${python} ARG jdk=11 diff --git a/ci/docker/conda-python-pandas.dockerfile b/ci/docker/conda-python-pandas.dockerfile index e39650af8212..07095377d8f0 100644 --- a/ci/docker/conda-python-pandas.dockerfile +++ b/ci/docker/conda-python-pandas.dockerfile @@ -18,7 +18,7 @@ ARG repo ARG arch ARG arch_short -ARG python=3.10 +ARG python=3.11 FROM --platform=linux/${arch} ${repo}:${arch_short}-conda-python-${python} ARG pandas=latest diff --git a/ci/docker/conda-python-spark.dockerfile b/ci/docker/conda-python-spark.dockerfile index 89bc231aad34..d7e74f08ee6c 100644 --- a/ci/docker/conda-python-spark.dockerfile +++ b/ci/docker/conda-python-spark.dockerfile @@ -18,7 +18,7 @@ ARG repo ARG arch ARG arch_short -ARG python=3.10 +ARG python=3.11 FROM --platform=linux/${arch} ${repo}:${arch_short}-conda-python-${python} ARG jdk=11 diff --git a/ci/docker/conda-python.dockerfile b/ci/docker/conda-python.dockerfile index db40b1009f1f..1a438d087f90 100644 --- a/ci/docker/conda-python.dockerfile +++ b/ci/docker/conda-python.dockerfile @@ -21,7 +21,7 @@ ARG arch_short FROM --platform=linux/${arch} ${repo}:${arch_short}-conda-cpp # install python specific packages -ARG python=3.10 +ARG python=3.11 COPY ci/conda_env_python.txt \ /arrow/ci/ # If the Python version being tested is the same as the Python used by the system gdb, diff --git a/ci/docker/cpp-jni.dockerfile b/ci/docker/cpp-jni.dockerfile index 5d1c3c6b45f4..c3fabd163fcd 100644 --- a/ci/docker/cpp-jni.dockerfile +++ b/ci/docker/cpp-jni.dockerfile @@ -38,9 +38,9 @@ RUN dnf module enable -y llvm-toolset && \ # A system Python is required for Ninja and vcpkg in this Dockerfile. # On manylinux_2_28 base images, no system Python is installed. -# We therefore override the PATH with Python 3.10 in /opt/python +# We therefore override the PATH with Python 3.11 in /opt/python # so that we have a consistent Python version across base images. -ENV CPYTHON_VERSION=cp310 +ENV CPYTHON_VERSION=cp311 ENV PATH=/opt/python/${CPYTHON_VERSION}-${CPYTHON_VERSION}/bin:${PATH} # Install CMake diff --git a/ci/docker/python-wheel-manylinux.dockerfile b/ci/docker/python-wheel-manylinux.dockerfile index 58e7ea533fc1..57814b11ec8a 100644 --- a/ci/docker/python-wheel-manylinux.dockerfile +++ b/ci/docker/python-wheel-manylinux.dockerfile @@ -30,9 +30,9 @@ RUN dnf install -y git flex curl autoconf zip perl-IPC-Cmd perl-Time-Piece wget # A system Python is required for Ninja and vcpkg in this Dockerfile. # On manylinux_2_28 base images, no system Python is installed. -# We therefore override the PATH with Python 3.10 in /opt/python +# We therefore override the PATH with Python 3.11 in /opt/python # so that we have a consistent Python version across base images. -ENV CPYTHON_VERSION=cp310 +ENV CPYTHON_VERSION=cp311 ENV PATH=/opt/python/${CPYTHON_VERSION}-${CPYTHON_VERSION}/bin:${PATH} # Install CMake @@ -109,8 +109,8 @@ RUN --mount=type=secret,id=github_repository_owner \ RUN pipx upgrade auditwheel>=6.4.0 # Configure Python for applications running in the bash shell of this Dockerfile -ARG python=3.10 -ARG python_abi_tag=cp310 +ARG python=3.11 +ARG python_abi_tag=cp311 ENV PYTHON_VERSION=${python} ENV PYTHON_ABI_TAG=${python_abi_tag} RUN PYTHON_ROOT=$(find /opt/python -name cp${PYTHON_VERSION/./}-${PYTHON_ABI_TAG}) && \ diff --git a/ci/docker/python-wheel-musllinux-test.dockerfile b/ci/docker/python-wheel-musllinux-test.dockerfile index 03473a9a347f..5ee59ef1de64 100644 --- a/ci/docker/python-wheel-musllinux-test.dockerfile +++ b/ci/docker/python-wheel-musllinux-test.dockerfile @@ -36,18 +36,7 @@ RUN cp /usr/share/zoneinfo/Etc/UTC /etc/localtime # pandas doesn't provide wheel for aarch64 yet, so cache the compiled # test dependencies in a docker image COPY python/requirements-wheel-test.txt /arrow/python/ -# Pandas 2.0.3 is the last version to support numpy 1.21.x which is -# the lowest version we support for Python 3.10. -# Pandas 2.0.3 doesn't have wheels for Python 3.10 so we need to build from source, -# which requires setuptools < 80. -# Drop when bumping numpy from 1.21.x (GH-48473) or when dropping Python 3.10. -RUN if [ "${python_image_tag}" = "3.10" ]; then \ - echo 'setuptools<80' > /tmp/setuptools-constraint.txt; \ - PIP_CONSTRAINT=/tmp/setuptools-constraint.txt \ - pip install -r /arrow/python/requirements-wheel-test.txt; \ - else \ - pip install -r /arrow/python/requirements-wheel-test.txt; \ - fi +RUN pip install -r /arrow/python/requirements-wheel-test.txt # Install the GCS testbench with the system Python COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts/ diff --git a/ci/docker/python-wheel-musllinux.dockerfile b/ci/docker/python-wheel-musllinux.dockerfile index 1ddbcfb81e40..c931d3194462 100644 --- a/ci/docker/python-wheel-musllinux.dockerfile +++ b/ci/docker/python-wheel-musllinux.dockerfile @@ -51,10 +51,10 @@ RUN apk add --no-cache mold # A system Python is required for ninja and vcpkg in this Dockerfile. # On musllinux_1_2 a system python is installed (3.12) but pip is not -# We therefore override the PATH with Python 3.10 in /opt/python +# We therefore override the PATH with Python 3.11 in /opt/python # so that we have a consistent Python version across base images # as well as pip. -ENV CPYTHON_VERSION=cp310 +ENV CPYTHON_VERSION=cp311 ENV PATH=/opt/python/${CPYTHON_VERSION}-${CPYTHON_VERSION}/bin:${PATH} # Install vcpkg @@ -110,8 +110,8 @@ RUN --mount=type=secret,id=github_repository_owner \ RUN pipx upgrade auditwheel # Configure Python for applications running in the bash shell of this Dockerfile -ARG python=3.10 -ARG python_abi_tag=cp310 +ARG python=3.11 +ARG python_abi_tag=cp311 ENV PYTHON_VERSION=${python} ENV PYTHON_ABI_TAG=${python_abi_tag} RUN PYTHON_ROOT=$(find /opt/python -name cp${PYTHON_VERSION/./}-${PYTHON_ABI_TAG}) && \ diff --git a/ci/docker/python-wheel-windows-test-vs2022.dockerfile b/ci/docker/python-wheel-windows-test-vs2022.dockerfile index 73a9e167fea6..fcb65ba2314e 100644 --- a/ci/docker/python-wheel-windows-test-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2022.dockerfile @@ -26,13 +26,12 @@ FROM ${base} # hadolint shell=cmd.exe -# 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") & \ +# Define the full version number otherwise choco falls back to patch number 0 (3.11 => 3.11.0) +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.9" && setx PYTHON_CMD "py -3.13") & \ - (if "%python%"=="3.14" setx PYTHON_VERSION "3.14.0" && setx PYTHON_CMD "py -3.14") + (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") # 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 e25ebef156c6..941083e7eef7 100644 --- a/ci/docker/python-wheel-windows-vs2022.dockerfile +++ b/ci/docker/python-wheel-windows-vs2022.dockerfile @@ -21,8 +21,7 @@ ARG base FROM ${base} -# Define the full version number otherwise choco falls back to patch number 0 (3.10 => 3.10.0) -ARG python=3.10 +ARG python=3.11 ARG python_variant_suffix="" ENV PYTHON_VERSION=${python}${python_variant_suffix} diff --git a/ci/scripts/install_python.sh b/ci/scripts/install_python.sh index b02a6ce63eae..f6502b1be8ce 100755 --- a/ci/scripts/install_python.sh +++ b/ci/scripts/install_python.sh @@ -25,12 +25,11 @@ platforms=([windows]=Windows [linux]=Linux) declare -A versions -versions=([3.10]=3.10.11 - [3.11]=3.11.9 +versions=([3.11]=3.11.9 [3.12]=3.12.10 - [3.13]=3.13.9 - [3.14]=3.14.0 - [3.14t]=3.14.0) + [3.13]=3.13.14 + [3.14]=3.14.6 + [3.14t]=3.14.6) if [ "$#" -ne 2 ]; then echo "Usage: $0 " diff --git a/ci/scripts/r_install_system_dependencies.sh b/ci/scripts/r_install_system_dependencies.sh index 042d6a5c9adb..955d1d6d58d3 100755 --- a/ci/scripts/r_install_system_dependencies.sh +++ b/ci/scripts/r_install_system_dependencies.sh @@ -62,10 +62,10 @@ if [ "$ARROW_S3" == "ON" ] || [ "$ARROW_GCS" == "ON" ] || [ "$ARROW_R_DEV" == "T case "$PACKAGE_MANAGER" in zypper) # python3 is Python 3.6 on OpenSUSE 15.3. - # PyArrow supports Python 3.10 or later. - $PACKAGE_MANAGER install -y python310-pip - ln -s /usr/bin/python3.10 /usr/local/bin/python - ln -s /usr/bin/pip3.10 /usr/local/bin/pip + # PyArrow supports Python 3.11 or later. + $PACKAGE_MANAGER install -y python311-pip + ln -s /usr/bin/python3.11 /usr/local/bin/python + ln -s /usr/bin/pip3.11 /usr/local/bin/pip ;; apk) $PACKAGE_MANAGER add py3-pip diff --git a/compose.yaml b/compose.yaml index dead873fee5e..6676a87bd570 100644 --- a/compose.yaml +++ b/compose.yaml @@ -939,7 +939,7 @@ services: # docker compose run --rm conda-python # Parameters: # ARCH: amd64, arm/v7 - # PYTHON: 3.10, 3.11, 3.12, 3.13 + # PYTHON: 3.11, 3.12, 3.13, 3.14 image: ${REPO}:${ARCH_SHORT}-conda-python-${PYTHON} build: context: . diff --git a/dev/archery/setup.py b/dev/archery/setup.py index 47ae2bb26b22..66d04d692fd9 100755 --- a/dev/archery/setup.py +++ b/dev/archery/setup.py @@ -21,8 +21,8 @@ import sys from setuptools import setup, find_packages -if sys.version_info < (3, 10): - sys.exit('Python < 3.10 is not supported') +if sys.version_info < (3, 11): + sys.exit('Python < 3.11 is not supported') # For pathlib.Path compatibility jinja_req = 'jinja2>=2.11' @@ -49,7 +49,7 @@ maintainer_email='dev@arrow.apache.org', packages=find_packages(), include_package_data=True, - python_requires='>=3.10', + python_requires='>=3.11', install_requires=['click>=7'], tests_require=['pytest', 'responses'], extras_require=extras, diff --git a/dev/release/verify-release-candidate-wheels.bat b/dev/release/verify-release-candidate-wheels.bat index 431e96f24dd8..0e98de0073c5 100644 --- a/dev/release/verify-release-candidate-wheels.bat +++ b/dev/release/verify-release-candidate-wheels.bat @@ -46,9 +46,6 @@ python dev\release\download_rc_binaries.py %ARROW_VERSION% %RC_NUMBER% ^ set ARROW_TEST_DATA=%cd%\testing\data set PARQUET_TEST_DATA=%cd%\cpp\submodules\parquet-testing\data -CALL :verify_wheel 3.10 -if errorlevel 1 GOTO error - CALL :verify_wheel 3.11 if errorlevel 1 GOTO error @@ -58,6 +55,9 @@ if errorlevel 1 GOTO error CALL :verify_wheel 3.13 if errorlevel 1 GOTO error +CALL :verify_wheel 3.14 +if errorlevel 1 GOTO error + :done cd %_CURRENT_DIR% diff --git a/dev/release/verify-release-candidate.bat b/dev/release/verify-release-candidate.bat index 5d903fdef008..e3e9e800e80a 100644 --- a/dev/release/verify-release-candidate.bat +++ b/dev/release/verify-release-candidate.bat @@ -56,7 +56,7 @@ if "%VERSION%"=="" ( set ARROW_TEST_DATA=!ARROW_SOURCE!\testing\data set PARQUET_TEST_DATA=!ARROW_SOURCE!\cpp\submodules\parquet-testing\data -set PYTHON=3.10 +set PYTHON=3.11 @rem Using call with conda.bat seems necessary to avoid terminating the batch @rem script execution diff --git a/dev/release/verify-release-candidate.sh b/dev/release/verify-release-candidate.sh index ae49367ba6fa..a060901ea4bf 100755 --- a/dev/release/verify-release-candidate.sh +++ b/dev/release/verify-release-candidate.sh @@ -859,7 +859,7 @@ test_linux_wheels() { local arch="x86_64" fi - local python_versions="${TEST_PYTHON_VERSIONS:-3.10 3.11 3.12 3.13 3.14}" + local python_versions="${TEST_PYTHON_VERSIONS:-3.11 3.12 3.13 3.14}" local platform_tags="${TEST_WHEEL_PLATFORM_TAGS:-manylinux_2_28_${arch}}" if [ "${SOURCE_KIND}" != "local" ]; then @@ -898,11 +898,11 @@ test_macos_wheels() { # apple silicon processor if [ "$(uname -m)" = "arm64" ]; then - local python_versions="3.10 3.11 3.12 3.13 3.14" + local python_versions="3.11 3.12 3.13 3.14" local platform_tags="macosx_12_0_arm64" local check_flight=OFF else - local python_versions="3.10 3.11 3.12 3.13 3.14" + local python_versions="3.11 3.12 3.13 3.14" local platform_tags="macosx_12_0_x86_64" fi diff --git a/dev/tasks/python-sdist/github.yml b/dev/tasks/python-sdist/github.yml index ac357f1e8833..36582fa0e250 100644 --- a/dev/tasks/python-sdist/github.yml +++ b/dev/tasks/python-sdist/github.yml @@ -39,7 +39,7 @@ jobs: - name: Test sdist run: archery docker run ubuntu-python-sdist-test env: - UBUNTU: 22.04 + UBUNTU: 24.04 PYARROW_VERSION: {{ arrow.no_rc_version }} - uses: actions/upload-artifact@v6 diff --git a/dev/tasks/python-wheels/github.linux.yml b/dev/tasks/python-wheels/github.linux.yml index e211343953bf..e9e36566ba8d 100644 --- a/dev/tasks/python-wheels/github.linux.yml +++ b/dev/tasks/python-wheels/github.linux.yml @@ -107,7 +107,7 @@ jobs: - name: Test wheel on Ubuntu 22.04 shell: bash if: | - '{{ python_version }}' == '3.10' && '{{ linux_wheel_kind }}' == 'manylinux' + '{{ python_version }}' == '3.11' && '{{ linux_wheel_kind }}' == 'manylinux' env: UBUNTU: "22.04" run: | diff --git a/dev/tasks/tasks.yml b/dev/tasks/tasks.yml index 56a9ce1472ac..c443c5a7e7c7 100644 --- a/dev/tasks/tasks.yml +++ b/dev/tasks/tasks.yml @@ -138,8 +138,7 @@ tasks: ########################### Python Wheels ############################ -{% for python_version, python_tag, abi_tag in [("3.10", "cp310", "cp310"), - ("3.11", "cp311", "cp311"), +{% for python_version, python_tag, abi_tag in [("3.11", "cp311", "cp311"), ("3.12", "cp312", "cp312"), ("3.13", "cp313", "cp313"), ("3.14", "cp314", "cp314"), @@ -496,7 +495,7 @@ tasks: UBUNTU: 22.04 image: ubuntu-cpp-emscripten -{% for python_version in ["3.10", "3.11", "3.12", "3.13", "3.14"] %} +{% for python_version in ["3.11", "3.12", "3.13", "3.14"] %} test-conda-python-{{ python_version }}: ci: github template: docker-tests/github.linux.yml @@ -557,20 +556,12 @@ tasks: image: debian-python {% endfor %} - test-ubuntu-22.04-python-3: - ci: github - template: docker-tests/github.linux.yml - params: - env: - UBUNTU: 22.04 - image: ubuntu-python - test-ubuntu-24.04-python-3: ci: github template: docker-tests/github.linux.yml params: env: - UBUNTU: 24.04 + UBUNTU: "24.04" image: ubuntu-python test-fedora-42-python-3: @@ -736,12 +727,12 @@ tasks: ############################## Integration tests ############################ -{% for python_version, pandas_version, numpy_version, cache_leaf in [("3.10", "1.3.4", "1.21.2", True), - ("3.11", "latest", "latest", False), - ("3.12", "latest", "1.26", False), +{% for python_version, pandas_version, numpy_version, cache_leaf in [("3.11", "1.5.2", "1.23.2", True), ("3.12", "latest", "latest", False), - ("3.13", "nightly", "nightly", False), - ("3.13", "upstream_devel", "nightly", False)] %} + ("3.13", "latest", "1.26.2", False), + ("3.13", "latest", "latest", False), + ("3.14", "nightly", "nightly", False), + ("3.14", "upstream_devel", "nightly", False)] %} test-conda-python-{{ python_version }}-pandas-{{ pandas_version }}-numpy-{{ numpy_version }}: ci: github template: docker-tests/github.linux.yml @@ -781,13 +772,13 @@ tasks: {% endfor %} {% for hdfs_version in ["2.9.2", "3.2.1"] %} - test-conda-python-3.10-hdfs-{{ hdfs_version }}: + test-conda-python-3.11-hdfs-{{ hdfs_version }}: ci: github template: docker-tests/github.linux.yml params: env: HDFS: "{{ hdfs_version }}" - PYTHON: "3.10" + PYTHON: "3.11" image: conda-python-hdfs {% endfor %} diff --git a/docs/source/developers/continuous_integration/archery.rst b/docs/source/developers/continuous_integration/archery.rst index b20ba5c2fc48..98c8e5976407 100644 --- a/docs/source/developers/continuous_integration/archery.rst +++ b/docs/source/developers/continuous_integration/archery.rst @@ -26,7 +26,7 @@ utility called Archery. Installation ------------ -Archery requires Python 3.10 or later. It is recommended to install Archery in +Archery requires Python 3.11 or later. It is recommended to install Archery in *editable* mode with the ``-e`` flag to automatically update the installation when pulling the Arrow repository. After cloning the Arrow repository, from the top level directory install Archery by using the command diff --git a/docs/source/developers/continuous_integration/crossbow.rst b/docs/source/developers/continuous_integration/crossbow.rst index ba99a1397a9d..8ec1e22b9a82 100644 --- a/docs/source/developers/continuous_integration/crossbow.rst +++ b/docs/source/developers/continuous_integration/crossbow.rst @@ -108,7 +108,7 @@ to step 3: or pass as an argument to the CLI script ``--github-token`` -6. Install Python (minimum supported version is 3.10): +6. Install Python (minimum supported version is 3.11): | Miniconda is preferred, see installation instructions: | https://conda.io/docs/user-guide/install/index.html diff --git a/docs/source/python/install.rst b/docs/source/python/install.rst index dd23e6bc04ed..5fa9ab6c778b 100644 --- a/docs/source/python/install.rst +++ b/docs/source/python/install.rst @@ -27,7 +27,7 @@ Linux distributions. We strongly recommend using a 64-bit system. Python Compatibility -------------------- -PyArrow is currently compatible with Python 3.10, 3.11, 3.12, 3.13 and 3.14. +PyArrow is currently compatible with Python 3.11, 3.12, 3.13 and 3.14. Using Conda ----------- @@ -73,8 +73,8 @@ Dependencies Optional dependencies -* **NumPy 1.21.2** or higher. -* **pandas 1.3.4** or higher, +* **NumPy 1.23.2** or higher. +* **pandas 1.5.2** or higher, * **cffi**. Additional packages PyArrow is compatible with are :ref:`fsspec ` diff --git a/python/examples/minimal_build/build_conda.sh b/python/examples/minimal_build/build_conda.sh index 3b3d7bd4e3be..46dbab9090f2 100755 --- a/python/examples/minimal_build/build_conda.sh +++ b/python/examples/minimal_build/build_conda.sh @@ -26,7 +26,7 @@ MINICONDA=$WORKDIR/miniconda-for-arrow LIBRARY_INSTALL_DIR=$WORKDIR/local-libs CPP_BUILD_DIR=$WORKDIR/arrow-cpp-build ARROW_ROOT=/arrow -PYTHON=3.10 +PYTHON=3.11 git config --global --add safe.directory $ARROW_ROOT diff --git a/python/pyproject.toml b/python/pyproject.toml index 0054e1a26828..9ceb5da92778 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -32,7 +32,7 @@ backend-path = ["."] [project] name = "pyarrow" dynamic = ["version"] -requires-python = ">=3.10" +requires-python = ">=3.11" description = "Python library for Apache Arrow" readme = {file = "README.md", content-type = "text/markdown"} license = "Apache-2.0" @@ -41,7 +41,6 @@ license-files = [ "NOTICE.txt", ] classifiers = [ - 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', @@ -123,7 +122,7 @@ exclude = [ # TODO: Enable type checking once stubs are merged [tool.pyright] pythonPlatform = "All" -pythonVersion = "3.10" +pythonVersion = "3.11" include = ["pyarrow-stubs"] exclude = [ "pyarrow", diff --git a/r/tests/testthat/test-python.R b/r/tests/testthat/test-python.R index 7f7419a6bb5f..0da8539ddef4 100644 --- a/r/tests/testthat/test-python.R +++ b/r/tests/testthat/test-python.R @@ -22,8 +22,8 @@ test_that("install_pyarrow", { # Windows CI machine doesn't pick up the right python or something skip_on_os("windows") skip_if_not_installed("reticulate") - # PyArrow doesn't support Python 3.9 or earlier - skip_on_python_older_than("3.10") + # PyArrow doesn't support Python 3.10 or earlier + skip_on_python_older_than("3.11") # no pyarrow wheels for macos 10.13 skip_if(on_macos_10_13_or_lower())