From 73b0ac2067f22effefd5436f2cce27d97f7c9b71 Mon Sep 17 00:00:00 2001 From: Xuan Wang Date: Mon, 8 Apr 2024 11:06:53 -0700 Subject: [PATCH] [Python Version] Drop support for Python 3.7 (#34450) ### NOTE * We shouldn't merge this PR until GCP cloud functions drops support for Python 3.7 ([Currently scheduled for GCF](https://cloud.google.com/functions/docs/runtime-support#python)) As part of supporting Python 3.12, we're now officially drop support for Python 3.7. This PR: * Changed supported Python version from 3.7 to 3.8 in README. * Replaced distribution test image from `debian:buster` to `debian:bullseye` since the default Python version in buster is 3.7. Closes #34450 PiperOrigin-RevId: 622899511 --- setup.py | 3 +- src/python/grpcio/README.rst | 2 +- src/python/grpcio_admin/setup.py | 2 +- src/python/grpcio_channelz/README.rst | 2 +- src/python/grpcio_channelz/setup.py | 6 +-- src/python/grpcio_csds/setup.py | 2 +- src/python/grpcio_health_checking/README.rst | 2 +- src/python/grpcio_health_checking/setup.py | 6 +-- src/python/grpcio_observability/setup.py | 2 +- src/python/grpcio_reflection/README.rst | 2 +- src/python/grpcio_reflection/setup.py | 6 +-- src/python/grpcio_status/README.rst | 2 +- src/python/grpcio_status/setup.py | 6 +-- src/python/grpcio_testing/README.rst | 2 +- test/distrib/gcf/python/run.sh | 14 ++++--- .../dockerimage_current_versions.bzl | 8 ++-- tools/bazelify_tests/test/BUILD | 25 +++++------ ... build_artifact_python_linux_x64_cp312.sh} | 4 +- ...> build_artifact_python_linux_x64_cp39.sh} | 4 +- tools/distrib/python/grpcio_tools/setup.py | 2 +- tools/distrib/python/xds_protos/setup.py | 2 +- .../python_bullseye_x64.current_version | 1 + .../Dockerfile | 2 +- .../python_bullseye_x86.current_version | 1 + .../Dockerfile | 2 +- .../python_buster_x64.current_version | 1 - .../python_buster_x86.current_version | 1 - .../python_dev_bullseye_x64.current_version | 1 + .../Dockerfile | 2 +- .../python_dev_bullseye_x86.current_version | 1 + .../Dockerfile | 2 +- .../python_dev_buster_x64.current_version | 1 - .../python_dev_buster_x86.current_version | 1 - tools/run_tests/artifacts/artifact_targets.py | 41 +++++-------------- .../artifacts/build_artifact_python.bat | 12 ------ .../artifacts/distribtest_targets.py | 8 ++-- tools/run_tests/helper_scripts/run_python.sh | 2 +- tools/run_tests/run_tests.py | 12 +----- 38 files changed, 70 insertions(+), 125 deletions(-) rename tools/bazelify_tests/test/{build_artifact_python_linux_x64_cp311.sh => build_artifact_python_linux_x64_cp312.sh} (93%) rename tools/bazelify_tests/test/{build_artifact_python_linux_x64_cp37.sh => build_artifact_python_linux_x64_cp39.sh} (93%) create mode 100644 tools/dockerfile/distribtest/python_bullseye_x64.current_version rename tools/dockerfile/distribtest/{python_buster_x64 => python_bullseye_x64}/Dockerfile (97%) create mode 100644 tools/dockerfile/distribtest/python_bullseye_x86.current_version rename tools/dockerfile/distribtest/{python_buster_x86 => python_bullseye_x86}/Dockerfile (97%) delete mode 100644 tools/dockerfile/distribtest/python_buster_x64.current_version delete mode 100644 tools/dockerfile/distribtest/python_buster_x86.current_version create mode 100644 tools/dockerfile/distribtest/python_dev_bullseye_x64.current_version rename tools/dockerfile/distribtest/{python_dev_buster_x64 => python_dev_bullseye_x64}/Dockerfile (97%) create mode 100644 tools/dockerfile/distribtest/python_dev_bullseye_x86.current_version rename tools/dockerfile/distribtest/{python_dev_buster_x86 => python_dev_bullseye_x86}/Dockerfile (97%) delete mode 100644 tools/dockerfile/distribtest/python_dev_buster_x64.current_version delete mode 100644 tools/dockerfile/distribtest/python_dev_buster_x86.current_version diff --git a/setup.py b/setup.py index 19544ce89d8..d25e924d594 100644 --- a/setup.py +++ b/setup.py @@ -101,7 +101,6 @@ CLASSIFIERS = [ "Development Status :: 5 - Production/Stable", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", @@ -597,7 +596,7 @@ setuptools.setup( packages=list(PACKAGES), package_dir=PACKAGE_DIRECTORIES, package_data=PACKAGE_DATA, - python_requires=">=3.7", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, extras_require=EXTRAS_REQUIRES, setup_requires=SETUP_REQUIRES, diff --git a/src/python/grpcio/README.rst b/src/python/grpcio/README.rst index f3563e2e803..e483521d549 100644 --- a/src/python/grpcio/README.rst +++ b/src/python/grpcio/README.rst @@ -10,7 +10,7 @@ Package for gRPC Python. Supported Python Versions ------------------------- -Python >= 3.7 +Python >= 3.8 Installation ------------ diff --git a/src/python/grpcio_admin/setup.py b/src/python/grpcio_admin/setup.py index b144b34dc86..4e6bdbc8dd5 100644 --- a/src/python/grpcio_admin/setup.py +++ b/src/python/grpcio_admin/setup.py @@ -56,7 +56,7 @@ setuptools.setup( url="https://grpc.io", package_dir=PACKAGE_DIRECTORIES, packages=setuptools.find_packages("."), - python_requires=">=3.6", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, setup_requires=SETUP_REQUIRES, ) diff --git a/src/python/grpcio_channelz/README.rst b/src/python/grpcio_channelz/README.rst index 9ae42a38f5c..027c0d9e10c 100644 --- a/src/python/grpcio_channelz/README.rst +++ b/src/python/grpcio_channelz/README.rst @@ -5,7 +5,7 @@ Channelz is a live debug tool in gRPC Python. Supported Python Versions ------------------------- -Python >= 3.7 +Python >= 3.8 Dependencies ------------ diff --git a/src/python/grpcio_channelz/setup.py b/src/python/grpcio_channelz/setup.py index 1da8b043406..06283d8ba37 100644 --- a/src/python/grpcio_channelz/setup.py +++ b/src/python/grpcio_channelz/setup.py @@ -48,10 +48,6 @@ CLASSIFIERS = [ "Development Status :: 5 - Production/Stable", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", @@ -101,7 +97,7 @@ setuptools.setup( url="https://grpc.io", package_dir=PACKAGE_DIRECTORIES, packages=setuptools.find_packages("."), - python_requires=">=3.6", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, setup_requires=SETUP_REQUIRES, cmdclass=COMMAND_CLASS, diff --git a/src/python/grpcio_csds/setup.py b/src/python/grpcio_csds/setup.py index 8310345b8e1..0aa3d50c1a0 100644 --- a/src/python/grpcio_csds/setup.py +++ b/src/python/grpcio_csds/setup.py @@ -57,7 +57,7 @@ setuptools.setup( url="https://grpc.io", package_dir=PACKAGE_DIRECTORIES, packages=setuptools.find_packages("."), - python_requires=">=3.6", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, setup_requires=SETUP_REQUIRES, ) diff --git a/src/python/grpcio_health_checking/README.rst b/src/python/grpcio_health_checking/README.rst index e5227e4ff2d..d13e671eae4 100644 --- a/src/python/grpcio_health_checking/README.rst +++ b/src/python/grpcio_health_checking/README.rst @@ -5,7 +5,7 @@ Reference package for GRPC Python health checking. Supported Python Versions ------------------------- -Python >= 3.7 +Python >= 3.8 Dependencies ------------ diff --git a/src/python/grpcio_health_checking/setup.py b/src/python/grpcio_health_checking/setup.py index 7fd0fec4201..b6dda84ed6f 100644 --- a/src/python/grpcio_health_checking/setup.py +++ b/src/python/grpcio_health_checking/setup.py @@ -47,10 +47,6 @@ CLASSIFIERS = [ "Development Status :: 5 - Production/Stable", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", @@ -100,7 +96,7 @@ setuptools.setup( classifiers=CLASSIFIERS, package_dir=PACKAGE_DIRECTORIES, packages=setuptools.find_packages("."), - python_requires=">=3.6", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, setup_requires=SETUP_REQUIRES, cmdclass=COMMAND_CLASS, diff --git a/src/python/grpcio_observability/setup.py b/src/python/grpcio_observability/setup.py index 2c43c7a3b6a..53e7b3d8de7 100644 --- a/src/python/grpcio_observability/setup.py +++ b/src/python/grpcio_observability/setup.py @@ -286,7 +286,7 @@ setuptools.setup( classifiers=CLASSIFIERS, ext_modules=extension_modules(), packages=list(PACKAGES), - python_requires=">=3.7", + python_requires=">=3.8", install_requires=[ "grpcio=={version}".format(version=grpc_version.VERSION), "setuptools>=59.6.0", diff --git a/src/python/grpcio_reflection/README.rst b/src/python/grpcio_reflection/README.rst index 269f4d928b2..b954108cc45 100644 --- a/src/python/grpcio_reflection/README.rst +++ b/src/python/grpcio_reflection/README.rst @@ -5,7 +5,7 @@ Reference package for reflection in GRPC Python. Supported Python Versions ------------------------- -Python >= 3.7 +Python >= 3.8 Dependencies ------------ diff --git a/src/python/grpcio_reflection/setup.py b/src/python/grpcio_reflection/setup.py index d3da0bc7426..37d5af18fa0 100644 --- a/src/python/grpcio_reflection/setup.py +++ b/src/python/grpcio_reflection/setup.py @@ -48,10 +48,6 @@ CLASSIFIERS = [ "Development Status :: 5 - Production/Stable", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", @@ -101,7 +97,7 @@ setuptools.setup( url="https://grpc.io", package_dir=PACKAGE_DIRECTORIES, packages=setuptools.find_packages("."), - python_requires=">=3.6", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, setup_requires=SETUP_REQUIRES, cmdclass=COMMAND_CLASS, diff --git a/src/python/grpcio_status/README.rst b/src/python/grpcio_status/README.rst index 640ea04d400..bfc753c799e 100644 --- a/src/python/grpcio_status/README.rst +++ b/src/python/grpcio_status/README.rst @@ -5,7 +5,7 @@ Reference package for GRPC Python status proto mapping. Supported Python Versions ------------------------- -Python >= 3.7 +Python >= 3.8 Dependencies ------------ diff --git a/src/python/grpcio_status/setup.py b/src/python/grpcio_status/setup.py index ad647e5db8b..503c11ee00d 100644 --- a/src/python/grpcio_status/setup.py +++ b/src/python/grpcio_status/setup.py @@ -47,10 +47,6 @@ CLASSIFIERS = [ "Development Status :: 5 - Production/Stable", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", @@ -97,7 +93,7 @@ setuptools.setup( classifiers=CLASSIFIERS, package_dir=PACKAGE_DIRECTORIES, packages=setuptools.find_packages("."), - python_requires=">=3.6", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, cmdclass=COMMAND_CLASS, ) diff --git a/src/python/grpcio_testing/README.rst b/src/python/grpcio_testing/README.rst index fe0b6562d00..1b8de5dca19 100644 --- a/src/python/grpcio_testing/README.rst +++ b/src/python/grpcio_testing/README.rst @@ -5,7 +5,7 @@ Testing utilities for gRPC Python Supported Python Versions ------------------------- -Python >= 3.7 +Python >= 3.8 Dependencies ------------ diff --git a/test/distrib/gcf/python/run.sh b/test/distrib/gcf/python/run.sh index 76db6919845..c19c080d7af 100755 --- a/test/distrib/gcf/python/run.sh +++ b/test/distrib/gcf/python/run.sh @@ -34,12 +34,16 @@ while read -r RUNTIME; do ARTIFACT=$(find "${ARTIFACT_DIRECTORY}" -regex '.*grpcio-[0-9\.]+.+-cp'"${BARE_VERSION}"'-cp'"${BARE_VERSION}"'m?-manylinux.+x86_64\.whl' | sort -r | head -n 1) ARTIFACT_BASENAME=$(basename "${ARTIFACT}") - # Upload artifact to GCS so GCF can access it. - # A 1 day retention policy is active on this bucket. - gsutil cp "${ARTIFACT}" "gs://${BUCKET_NAME}/${RUN_ID}/${ARTIFACT_BASENAME}" + if [ "$ARTIFACT_BASENAME" != "" ]; then + # Upload artifact to GCS so GCF can access it. + # A 1 day retention policy is active on this bucket. + gsutil cp "${ARTIFACT}" "gs://${BUCKET_NAME}/${RUN_ID}/${ARTIFACT_BASENAME}" - echo "Testing runtime ${RUNTIME} with artifact ${ARTIFACT_BASENAME}" - ./run_single.sh "${RUNTIME}" "https://storage.googleapis.com/${BUCKET_NAME}/${RUN_ID}/${ARTIFACT_BASENAME}" || FAILED_RUNTIMES="${FAILED_RUNTIMES} ${RUNTIME}" + echo "Testing runtime ${RUNTIME} with artifact ${ARTIFACT_BASENAME}" + ./run_single.sh "${RUNTIME}" "https://storage.googleapis.com/${BUCKET_NAME}/${RUN_ID}/${ARTIFACT_BASENAME}" || FAILED_RUNTIMES="${FAILED_RUNTIMES} ${RUNTIME}" + else + echo "Skip testing ${RUNTIME} because we no longer support this version" + fi done<<<"${RUNTIMES}" if [ "$FAILED_RUNTIMES" != "" ] diff --git a/tools/bazelify_tests/dockerimage_current_versions.bzl b/tools/bazelify_tests/dockerimage_current_versions.bzl index 323ce5b6694..ff203518478 100644 --- a/tools/bazelify_tests/dockerimage_current_versions.bzl +++ b/tools/bazelify_tests/dockerimage_current_versions.bzl @@ -38,13 +38,13 @@ DOCKERIMAGE_CURRENT_VERSIONS = { "tools/dockerfile/distribtest/php7_debian10_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/php7_debian10_x64@sha256:e760a60f2dce2dada571d9b07447a9f99ffeeb366a309dbbb5dc0a43991c22dc", "tools/dockerfile/distribtest/python_alpine_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_alpine_x64@sha256:699ac7b86199406fa27e88f30a1c623ef34ac33f6d9330fd13a6f6457ee4e19f", "tools/dockerfile/distribtest/python_arch_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_arch_x64@sha256:2c1adadeb010e107132cf5137f32a2d18727796631245b110cc74f69c07502e1", - "tools/dockerfile/distribtest/python_buster_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_buster_x64@sha256:e501dc8e2f4ab9cd4382974759a879a27c065c8fed5327f538764298fc5c4972", - "tools/dockerfile/distribtest/python_buster_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_buster_x86@sha256:185fbb174525d67b6146f4d233c804c589b0b57d783bb1bf95bc47cfe792754e", + "tools/dockerfile/distribtest/python_bullseye_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_bullseye_x64@sha256:3dd069d9624f9c2a3b398f4017de7d020481e02be9a9f3895b50f6ea3e6f724d", + "tools/dockerfile/distribtest/python_bullseye_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_bullseye_x86@sha256:3bf999ddafc0c7e7c45aeafbbecaf8dfba808e0bcff6f02240d6f5c63066dea8", "tools/dockerfile/distribtest/python_centos7_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_centos7_x64@sha256:39afaa687cb8516eef1621ed789326fdde2014fd3c81d11a1ded72f2d5285fe1", "tools/dockerfile/distribtest/python_dev_alpine3.7_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_alpine3.7_x64@sha256:7c08f67211a49eb72ad08c29de5c64a914c066d9c1670b712e717571b8d5c7e2", "tools/dockerfile/distribtest/python_dev_arch_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_arch_x64@sha256:29f179ef2083ee6addd57e90f58781fdc1cb5dc3dd3e228da1af38785b921f35", - "tools/dockerfile/distribtest/python_dev_buster_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_buster_x64@sha256:e30d6efdeac24e5136cc169d503a239df22147bfb121d27feb1f87d58a8fe64e", - "tools/dockerfile/distribtest/python_dev_buster_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_buster_x86@sha256:179146fd5d5cc15846c6bf0284c2e261f383caf944559d2d9f7a5af0e0f7152d", + "tools/dockerfile/distribtest/python_dev_bullseye_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_bullseye_x64@sha256:c14d39ef2d7e4b8267c805aeee754c85286cc7ac9ad9fb553b1bf61b9e95e7af", + "tools/dockerfile/distribtest/python_dev_bullseye_x86.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_bullseye_x86@sha256:e152acde58bcdee5c4c97532c00087f2e7ba6a19508d8d22e90abd6dcd3ba669", "tools/dockerfile/distribtest/python_dev_centos7_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_centos7_x64@sha256:e6e9a1b23a0a543050db91e17d621aa899bad04308adaf961c11fa88ba941a95", "tools/dockerfile/distribtest/python_dev_fedora36_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_fedora36_x64@sha256:d10ea0c54ecaa861b67942b4adc69178585cd071c9d0c8997fa274a362beea55", "tools/dockerfile/distribtest/python_dev_ubuntu2004_x64.current_version": "docker://us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_ubuntu2004_x64@sha256:91f0d88c43ec52ecd63f99acb424c88ff9a67fa046fae207a75e99bee37eef11", diff --git a/tools/bazelify_tests/test/BUILD b/tools/bazelify_tests/test/BUILD index 2d35ea3c2fe..3907af29206 100644 --- a/tools/bazelify_tests/test/BUILD +++ b/tools/bazelify_tests/test/BUILD @@ -14,8 +14,8 @@ load("//bazel:grpc_build_system.bzl", "grpc_package") load("//tools/bazelify_tests:build_defs.bzl", "grpc_build_artifact_task", "grpc_run_cpp_distribtest_test", "grpc_run_distribtest_test", "grpc_run_simple_command_test", "grpc_run_tests_harness_test") -load(":portability_tests.bzl", "generate_run_tests_portability_tests") load(":bazel_distribtests.bzl", "generate_bazel_distribtests") +load(":portability_tests.bzl", "generate_run_tests_portability_tests") load(":strict_tests.bzl", "generate_strict_tests") licenses(["notice"]) @@ -269,14 +269,15 @@ grpc_build_artifact_task( # Python artifact build tasks grpc_build_artifact_task( - name = "artifact_python_linux_x64_manylinux2014_cp311", - build_script = "build_artifact_python_linux_x64_cp311.sh", + name = "artifact_python_linux_x64_manylinux2014_cp312", + build_script = "build_artifact_python_linux_x64_cp312.sh", docker_image_version = "tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version", ) +# Building 39 here since default Python version in testing image is 3.9. grpc_build_artifact_task( - name = "artifact_python_linux_x64_manylinux2014_cp37", - build_script = "build_artifact_python_linux_x64_cp37.sh", + name = "artifact_python_linux_x64_manylinux2014_cp39", + build_script = "build_artifact_python_linux_x64_cp39.sh", docker_image_version = "tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version", ) @@ -286,8 +287,8 @@ grpc_build_artifact_task( name = "package_python_linux", # TODO(jtattermusch): add more python artifacts once they are migrated from artifact_targets.py artifact_deps = [ - "artifact_python_linux_x64_manylinux2014_cp311", - "artifact_python_linux_x64_manylinux2014_cp37", + "artifact_python_linux_x64_manylinux2014_cp312", + "artifact_python_linux_x64_manylinux2014_cp39", ], build_script = "build_package_python_linux.sh", docker_image_version = "tools/dockerfile/grpc_artifact_python_manylinux2014_x64.current_version", @@ -393,18 +394,18 @@ test_suite( # Python distribtests grpc_run_distribtest_test( - name = "distribtest_python_linux_x64_buster", + name = "distribtest_python_linux_x64_bullseye", artifact_deps = [ "package_python_linux", ], build_script = "run_distribtest_python_linux.sh", - docker_image_version = "tools/dockerfile/distribtest/python_buster_x64.current_version", + docker_image_version = "tools/dockerfile/distribtest/python_bullseye_x64.current_version", ) test_suite( name = "python_distribtests_linux", tests = [ - ":distribtest_python_linux_x64_buster", + ":distribtest_python_linux_x64_bullseye", ], ) @@ -420,8 +421,8 @@ test_suite( ":artifact_protoc_linux_aarch64_build_test", ":artifact_protoc_linux_x64_build_test", ":artifact_protoc_linux_x86_build_test", - ":artifact_python_linux_x64_manylinux2014_cp311_build_test", - ":artifact_python_linux_x64_manylinux2014_cp37_build_test", + ":artifact_python_linux_x64_manylinux2014_cp312_build_test", + ":artifact_python_linux_x64_manylinux2014_cp38_build_test", ":package_csharp_linux_build_test", ":package_python_linux_build_test", ], diff --git a/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp311.sh b/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp312.sh similarity index 93% rename from tools/bazelify_tests/test/build_artifact_python_linux_x64_cp311.sh rename to tools/bazelify_tests/test/build_artifact_python_linux_x64_cp312.sh index 419fe68ea98..8604176c82e 100755 --- a/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp311.sh +++ b/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp312.sh @@ -17,8 +17,8 @@ set -ex # env variable values extracted from PythonArtifact in tools/run_tests/artifacts/artifact_targets.py # TODO(jtattermusch): find a better way of configuring the python artifact build (the current approach mostly serves as a demonstration) -export PYTHON=/opt/python/cp311-cp311/bin/python -export PIP=/opt/python/cp311-cp311/bin/pip +export PYTHON=/opt/python/cp312-cp312/bin/python +export PIP=/opt/python/cp312-cp312/bin/pip export GRPC_SKIP_PIP_CYTHON_UPGRADE=TRUE export GRPC_RUN_AUDITWHEEL_REPAIR=TRUE export GRPC_BUILD_GRPCIO_TOOLS_DEPENDENTS=TRUE diff --git a/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp37.sh b/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp39.sh similarity index 93% rename from tools/bazelify_tests/test/build_artifact_python_linux_x64_cp37.sh rename to tools/bazelify_tests/test/build_artifact_python_linux_x64_cp39.sh index 5768cebfe92..88ac44d63d8 100755 --- a/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp37.sh +++ b/tools/bazelify_tests/test/build_artifact_python_linux_x64_cp39.sh @@ -17,8 +17,8 @@ set -ex # env variable values extracted from PythonArtifact in tools/run_tests/artifacts/artifact_targets.py # TODO(jtattermusch): find a better way of configuring the python artifact build (the current approach mostly serves as a demonstration) -export PYTHON=/opt/python/cp37-cp37m/bin/python -export PIP=/opt/python/cp37-cp37m/bin/pip +export PYTHON=/opt/python/cp39-cp39/bin/python +export PIP=/opt/python/cp39-cp39/bin/pip export GRPC_SKIP_PIP_CYTHON_UPGRADE=TRUE export GRPC_RUN_AUDITWHEEL_REPAIR=TRUE export GRPC_BUILD_GRPCIO_TOOLS_DEPENDENTS=TRUE diff --git a/tools/distrib/python/grpcio_tools/setup.py b/tools/distrib/python/grpcio_tools/setup.py index a41915895b3..d2cecee2c9e 100644 --- a/tools/distrib/python/grpcio_tools/setup.py +++ b/tools/distrib/python/grpcio_tools/setup.py @@ -327,7 +327,7 @@ setuptools.setup( classifiers=CLASSIFIERS, ext_modules=extension_modules(), packages=setuptools.find_packages("."), - python_requires=">=3.7", + python_requires=">=3.8", install_requires=[ "protobuf>=4.21.6,<5.0dev", "grpcio>={version}".format(version=grpc_version.VERSION), diff --git a/tools/distrib/python/xds_protos/setup.py b/tools/distrib/python/xds_protos/setup.py index 0737c96bc37..71c5429cd58 100644 --- a/tools/distrib/python/xds_protos/setup.py +++ b/tools/distrib/python/xds_protos/setup.py @@ -55,7 +55,7 @@ setuptools.setup( author_email="grpc-io@googlegroups.com", url="https://grpc.io", license="Apache License 2.0", - python_requires=">=3.7", + python_requires=">=3.8", install_requires=INSTALL_REQUIRES, setup_requires=SETUP_REQUIRES, classifiers=CLASSIFIERS, diff --git a/tools/dockerfile/distribtest/python_bullseye_x64.current_version b/tools/dockerfile/distribtest/python_bullseye_x64.current_version new file mode 100644 index 00000000000..8c7d9d252d3 --- /dev/null +++ b/tools/dockerfile/distribtest/python_bullseye_x64.current_version @@ -0,0 +1 @@ +us-docker.pkg.dev/grpc-testing/testing-images-public/python_bullseye_x64:38233270df023245a398dfa3460302eed4d0d5ca@sha256:3dd069d9624f9c2a3b398f4017de7d020481e02be9a9f3895b50f6ea3e6f724d \ No newline at end of file diff --git a/tools/dockerfile/distribtest/python_buster_x64/Dockerfile b/tools/dockerfile/distribtest/python_bullseye_x64/Dockerfile similarity index 97% rename from tools/dockerfile/distribtest/python_buster_x64/Dockerfile rename to tools/dockerfile/distribtest/python_bullseye_x64/Dockerfile index bc509e7e7b9..bfd99421900 100644 --- a/tools/dockerfile/distribtest/python_buster_x64/Dockerfile +++ b/tools/dockerfile/distribtest/python_bullseye_x64/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM debian:buster +FROM debian:bullseye RUN apt-get update && apt-get install -y python3 python3-pip RUN python3 -m pip install virtualenv==16.7.9 diff --git a/tools/dockerfile/distribtest/python_bullseye_x86.current_version b/tools/dockerfile/distribtest/python_bullseye_x86.current_version new file mode 100644 index 00000000000..fb3fd185ba6 --- /dev/null +++ b/tools/dockerfile/distribtest/python_bullseye_x86.current_version @@ -0,0 +1 @@ +us-docker.pkg.dev/grpc-testing/testing-images-public/python_bullseye_x86:f4c57dce9d3d95f2062555abdc6b0fc9df86f6d9@sha256:3bf999ddafc0c7e7c45aeafbbecaf8dfba808e0bcff6f02240d6f5c63066dea8 \ No newline at end of file diff --git a/tools/dockerfile/distribtest/python_buster_x86/Dockerfile b/tools/dockerfile/distribtest/python_bullseye_x86/Dockerfile similarity index 97% rename from tools/dockerfile/distribtest/python_buster_x86/Dockerfile rename to tools/dockerfile/distribtest/python_bullseye_x86/Dockerfile index aa22053379b..ac05b405af6 100644 --- a/tools/dockerfile/distribtest/python_buster_x86/Dockerfile +++ b/tools/dockerfile/distribtest/python_bullseye_x86/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM i386/debian:buster +FROM i386/debian:bullseye RUN apt-get update && apt-get install -y python3 python3-pip diff --git a/tools/dockerfile/distribtest/python_buster_x64.current_version b/tools/dockerfile/distribtest/python_buster_x64.current_version deleted file mode 100644 index 45fbc8eb7a4..00000000000 --- a/tools/dockerfile/distribtest/python_buster_x64.current_version +++ /dev/null @@ -1 +0,0 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/python_buster_x64:e5ed17c49c3b3ea2476c09c249ee99615e2a2744@sha256:e501dc8e2f4ab9cd4382974759a879a27c065c8fed5327f538764298fc5c4972 \ No newline at end of file diff --git a/tools/dockerfile/distribtest/python_buster_x86.current_version b/tools/dockerfile/distribtest/python_buster_x86.current_version deleted file mode 100644 index 7343ea437a9..00000000000 --- a/tools/dockerfile/distribtest/python_buster_x86.current_version +++ /dev/null @@ -1 +0,0 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/python_buster_x86:c6c77a4a3d0f571e7b96269f193eb5b6bc68b40d@sha256:185fbb174525d67b6146f4d233c804c589b0b57d783bb1bf95bc47cfe792754e \ No newline at end of file diff --git a/tools/dockerfile/distribtest/python_dev_bullseye_x64.current_version b/tools/dockerfile/distribtest/python_dev_bullseye_x64.current_version new file mode 100644 index 00000000000..a3177df29e8 --- /dev/null +++ b/tools/dockerfile/distribtest/python_dev_bullseye_x64.current_version @@ -0,0 +1 @@ +us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_bullseye_x64:2ba38f738117f4ddbbb2930e0cf99025214cfeb8@sha256:c14d39ef2d7e4b8267c805aeee754c85286cc7ac9ad9fb553b1bf61b9e95e7af \ No newline at end of file diff --git a/tools/dockerfile/distribtest/python_dev_buster_x64/Dockerfile b/tools/dockerfile/distribtest/python_dev_bullseye_x64/Dockerfile similarity index 97% rename from tools/dockerfile/distribtest/python_dev_buster_x64/Dockerfile rename to tools/dockerfile/distribtest/python_dev_bullseye_x64/Dockerfile index 75420816169..ced72730409 100644 --- a/tools/dockerfile/distribtest/python_dev_buster_x64/Dockerfile +++ b/tools/dockerfile/distribtest/python_dev_bullseye_x64/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM debian:buster +FROM debian:bullseye RUN apt-get update && apt-get install -y python3 python3-pip RUN python3 -m pip install virtualenv==16.7.9 diff --git a/tools/dockerfile/distribtest/python_dev_bullseye_x86.current_version b/tools/dockerfile/distribtest/python_dev_bullseye_x86.current_version new file mode 100644 index 00000000000..24e336da58c --- /dev/null +++ b/tools/dockerfile/distribtest/python_dev_bullseye_x86.current_version @@ -0,0 +1 @@ +us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_bullseye_x86:475606cf6ceee84f7088f1d5d950f0f262173399@sha256:e152acde58bcdee5c4c97532c00087f2e7ba6a19508d8d22e90abd6dcd3ba669 \ No newline at end of file diff --git a/tools/dockerfile/distribtest/python_dev_buster_x86/Dockerfile b/tools/dockerfile/distribtest/python_dev_bullseye_x86/Dockerfile similarity index 97% rename from tools/dockerfile/distribtest/python_dev_buster_x86/Dockerfile rename to tools/dockerfile/distribtest/python_dev_bullseye_x86/Dockerfile index a3b9cbc7e79..280571ecc54 100644 --- a/tools/dockerfile/distribtest/python_dev_buster_x86/Dockerfile +++ b/tools/dockerfile/distribtest/python_dev_bullseye_x86/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM i386/debian:buster +FROM i386/debian:bullseye RUN apt-get update && apt-get install -y python3 python3-pip diff --git a/tools/dockerfile/distribtest/python_dev_buster_x64.current_version b/tools/dockerfile/distribtest/python_dev_buster_x64.current_version deleted file mode 100644 index 69991b81a1d..00000000000 --- a/tools/dockerfile/distribtest/python_dev_buster_x64.current_version +++ /dev/null @@ -1 +0,0 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_buster_x64:f72da78097dfc18225ef0da25da07a5c220bdd47@sha256:e30d6efdeac24e5136cc169d503a239df22147bfb121d27feb1f87d58a8fe64e \ No newline at end of file diff --git a/tools/dockerfile/distribtest/python_dev_buster_x86.current_version b/tools/dockerfile/distribtest/python_dev_buster_x86.current_version deleted file mode 100644 index 94af1426251..00000000000 --- a/tools/dockerfile/distribtest/python_dev_buster_x86.current_version +++ /dev/null @@ -1 +0,0 @@ -us-docker.pkg.dev/grpc-testing/testing-images-public/python_dev_buster_x86:9966610e9ebd738965baa64ba7230385e088db5b@sha256:179146fd5d5cc15846c6bf0284c2e261f383caf944559d2d9f7a5af0e0f7152d \ No newline at end of file diff --git a/tools/run_tests/artifacts/artifact_targets.py b/tools/run_tests/artifacts/artifact_targets.py index 198a0b99179..e67be1f7bb5 100644 --- a/tools/run_tests/artifacts/artifact_targets.py +++ b/tools/run_tests/artifacts/artifact_targets.py @@ -397,29 +397,20 @@ def targets(): ProtocArtifact("macos", "x64", presubmit=True), ProtocArtifact("windows", "x64", presubmit=True), ProtocArtifact("windows", "x86", presubmit=True), - PythonArtifact( - "manylinux2014", "x64", "cp37-cp37m", presubmit=True - ), PythonArtifact("manylinux2014", "x64", "cp38-cp38", presubmit=True), - PythonArtifact("manylinux2014", "x64", "cp39-cp39"), + PythonArtifact("manylinux2014", "x64", "cp39-cp39", presubmit=True), PythonArtifact("manylinux2014", "x64", "cp310-cp310"), PythonArtifact("manylinux2014", "x64", "cp311-cp311"), PythonArtifact( "manylinux2014", "x64", "cp312-cp312", presubmit=True ), - PythonArtifact( - "manylinux2014", "x86", "cp37-cp37m", presubmit=True - ), PythonArtifact("manylinux2014", "x86", "cp38-cp38", presubmit=True), - PythonArtifact("manylinux2014", "x86", "cp39-cp39"), + PythonArtifact("manylinux2014", "x86", "cp39-cp39", presubmit=True), PythonArtifact("manylinux2014", "x86", "cp310-cp310"), PythonArtifact("manylinux2014", "x86", "cp311-cp311"), PythonArtifact( "manylinux2014", "x86", "cp312-cp312", presubmit=True ), - PythonArtifact( - "manylinux2014", "aarch64", "cp37-cp37m", presubmit=True - ), PythonArtifact( "manylinux2014", "aarch64", "cp38-cp38", presubmit=True ), @@ -429,50 +420,38 @@ def targets(): PythonArtifact( "manylinux2014", "aarch64", "cp312-cp312", presubmit=True ), - PythonArtifact( - "linux_extra", "armv7", "cp37-cp37m", presubmit=True - ), - PythonArtifact("linux_extra", "armv7", "cp38-cp38"), + PythonArtifact("linux_extra", "armv7", "cp38-cp38", presubmit=True), PythonArtifact("linux_extra", "armv7", "cp39-cp39"), PythonArtifact("linux_extra", "armv7", "cp310-cp310"), PythonArtifact("linux_extra", "armv7", "cp311-cp311"), PythonArtifact( "linux_extra", "armv7", "cp312-cp312", presubmit=True ), + PythonArtifact("musllinux_1_1", "x64", "cp38-cp38", presubmit=True), + PythonArtifact("musllinux_1_1", "x64", "cp39-cp39"), PythonArtifact("musllinux_1_1", "x64", "cp310-cp310"), PythonArtifact("musllinux_1_1", "x64", "cp311-cp311"), PythonArtifact( "musllinux_1_1", "x64", "cp312-cp312", presubmit=True ), - PythonArtifact( - "musllinux_1_1", "x64", "cp37-cp37m", presubmit=True - ), - PythonArtifact("musllinux_1_1", "x64", "cp38-cp38"), - PythonArtifact("musllinux_1_1", "x64", "cp39-cp39"), + PythonArtifact("musllinux_1_1", "x86", "cp38-cp38", presubmit=True), + PythonArtifact("musllinux_1_1", "x86", "cp39-cp39"), PythonArtifact("musllinux_1_1", "x86", "cp310-cp310"), PythonArtifact("musllinux_1_1", "x86", "cp311-cp311"), PythonArtifact( "musllinux_1_1", "x86", "cp312-cp312", presubmit=True ), - PythonArtifact( - "musllinux_1_1", "x86", "cp37-cp37m", presubmit=True - ), - PythonArtifact("musllinux_1_1", "x86", "cp38-cp38"), - PythonArtifact("musllinux_1_1", "x86", "cp39-cp39"), - PythonArtifact("macos", "x64", "python3.7", presubmit=True), - PythonArtifact("macos", "x64", "python3.8"), + PythonArtifact("macos", "x64", "python3.8", presubmit=True), PythonArtifact("macos", "x64", "python3.9"), PythonArtifact("macos", "x64", "python3.10"), PythonArtifact("macos", "x64", "python3.11"), PythonArtifact("macos", "x64", "python3.12", presubmit=True), - PythonArtifact("windows", "x86", "Python37_32bit", presubmit=True), - PythonArtifact("windows", "x86", "Python38_32bit"), + PythonArtifact("windows", "x86", "Python38_32bit", presubmit=True), PythonArtifact("windows", "x86", "Python39_32bit"), PythonArtifact("windows", "x86", "Python310_32bit"), PythonArtifact("windows", "x86", "Python311_32bit"), PythonArtifact("windows", "x86", "Python312_32bit", presubmit=True), - PythonArtifact("windows", "x64", "Python37", presubmit=True), - PythonArtifact("windows", "x64", "Python38"), + PythonArtifact("windows", "x64", "Python38", presubmit=True), PythonArtifact("windows", "x64", "Python39"), PythonArtifact("windows", "x64", "Python310"), PythonArtifact("windows", "x64", "Python311"), diff --git a/tools/run_tests/artifacts/build_artifact_python.bat b/tools/run_tests/artifacts/build_artifact_python.bat index 0bfc06d388b..587d4b55ff1 100644 --- a/tools/run_tests/artifacts/build_artifact_python.bat +++ b/tools/run_tests/artifacts/build_artifact_python.bat @@ -19,19 +19,7 @@ set PATH=C:\%1;C:\%1\scripts;%PATH% set PATH=C:\msys64\mingw%2\bin;C:\tools\msys64\mingw%2\bin;%PATH% :end_mingw64_installation -@rem check if building for Python3.7 in windows -set IS_PYTHON_37=false -If "%1" == "Python37_32bit" set IS_PYTHON_37=true -If "%1" == "Python37" set IS_PYTHON_37=true - -@rem Python3.7 in windows doesn't support high version of setuptools -if "%IS_PYTHON_37%" == "true" ( -python -m pip install --upgrade six -python -m pip install --upgrade setuptools==59.6.0 -) else ( python -m pip install --upgrade pip six setuptools wheel -) - python -m pip install --upgrade "cython<3.0.0rc1" python -m pip install -rrequirements.txt --user diff --git a/tools/run_tests/artifacts/distribtest_targets.py b/tools/run_tests/artifacts/distribtest_targets.py index c367171c331..69d3b3f0012 100644 --- a/tools/run_tests/artifacts/distribtest_targets.py +++ b/tools/run_tests/artifacts/distribtest_targets.py @@ -443,8 +443,8 @@ def targets(): CSharpDistribTest("windows", "x86", presubmit=True), CSharpDistribTest("windows", "x64", presubmit=True), # Python - PythonDistribTest("linux", "x64", "buster", presubmit=True), - PythonDistribTest("linux", "x86", "buster", presubmit=True), + PythonDistribTest("linux", "x64", "bullseye", presubmit=True), + PythonDistribTest("linux", "x86", "bullseye", presubmit=True), PythonDistribTest("linux", "x64", "fedora36"), PythonDistribTest("linux", "x64", "arch"), PythonDistribTest("linux", "x64", "alpine"), @@ -456,10 +456,10 @@ def targets(): "linux", "x64", "alpine3.7", source=True, presubmit=True ), PythonDistribTest( - "linux", "x64", "buster", source=True, presubmit=True + "linux", "x64", "bullseye", source=True, presubmit=True ), PythonDistribTest( - "linux", "x86", "buster", source=True, presubmit=True + "linux", "x86", "bullseye", source=True, presubmit=True ), PythonDistribTest("linux", "x64", "fedora36", source=True), PythonDistribTest("linux", "x64", "arch", source=True), diff --git a/tools/run_tests/helper_scripts/run_python.sh b/tools/run_tests/helper_scripts/run_python.sh index 40c6939859b..4154fb34b74 100755 --- a/tools/run_tests/helper_scripts/run_python.sh +++ b/tools/run_tests/helper_scripts/run_python.sh @@ -19,7 +19,7 @@ set -ex cd "$(dirname "$0")/../../.." # TODO(jtattermusch): is the $(pwd) prefix actually useful? -PYTHON="$(pwd)/${1:-py37/bin/python}" +PYTHON="$(pwd)/${1:-py38/bin/python}" ROOT=$(pwd) diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index e892b6b7d6e..061f00f11c8 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -799,13 +799,6 @@ class PythonLanguage(object): # TODO: Supported version range should be defined by a single # source of truth. - python37_config = _python_config_generator( - name="py37", - major="3", - minor="7", - bits=bits, - config_vars=config_vars, - ) python38_config = _python_config_generator( name="py38", major="3", @@ -864,11 +857,9 @@ class PythonLanguage(object): else: # Default set tested on master. Test oldest and newest. return ( - python37_config, + python38_config, python312_config, ) - elif args.compiler == "python3.7": - return (python37_config,) elif args.compiler == "python3.8": return (python38_config,) elif args.compiler == "python3.9": @@ -887,7 +878,6 @@ class PythonLanguage(object): return (python39_config,) elif args.compiler == "all_the_cpythons": return ( - python37_config, python38_config, python39_config, python310_config,