Skip to content

Commit 74ec067

Browse files
authored
[Backport][v1.75.x][Python][Support 3.14] Enable 3.14 supported wheels (#40726)
Backport of #40403 to v1.75.x. --- This PR enables Python 3.14 in all the different tests - Basic tests (Native Python tests), Bazel tests and Distrib tests to build Python 3.14 artifacts. In addition, it also updates all the public facing METADATA versions. ## Distribtests Required pre-requisite changes to enable 3.14 artifacts are covered in #40289 . ## Bazel tests Enabling Python 3.14 required updating the rules_python version to a more recent version that supports 3.14. This was done in #40602 ## Basic tests The following errors were caught by the Basic tests when running via Python 3.14 and resolved in this PR: ### 1) No running event loop for AsyncIO when run outside an async function ``` Traceback (most recent call last): File "src/python/grpcio/grpc/_cython/_cygrpc/aio/common.pyx.pxi", line 184, in grpc._cython.cygrpc.get_working_loop RuntimeError: no running event loop ``` This was caught by the `tests_aio.unit.outside_init_test.TestOutsideInit` and `tests_aio.unit.init_test.TestInit` tests, and was also previously reported in #39507 with the root cause. Following some investigation, the fix is being worked on by @sergiitk in PR #40293. In order to parallelize the fix and this PR, these 2 tests are currently being skipped for Python 3.14 and above. ### 2) Pickling error from the `multiprocessing` library ``` _pickle.PicklingError: Can't pickle <function _test_well_known_types at 0x7f3937eee610>: it's not the same object as tests.unit._dynamic_stubs_test._test_well_known_types when serializing dict item '_target' when serializing multiprocessing.context.Process state when serializing multiprocessing.context.Process object ``` This was caught by the `tests.unit._dynamic_stubs_test.DynamicStubTest` which runs test cases in a subprocess using the `multiprocessing` library. Error root cause: - The default start method of multiprocessing in linux has changed to `forkserver` instead of `fork` from Python 3.14. - `forkserver` has a few extra restrictions for picklability as compared to `fork` (Ref: [Python Docs](https://docs.python.org/3.14/library/multiprocessing.html#the-spawn-and-forkserver-start-methods)) - All the [test case functions](https://github.com/grpc/grpc/blob/0243842d5d10f624bf8f09f45026dd300805502f/src/python/grpcio_tests/tests/unit/_dynamic_stubs_test.py#L115) in the DynamicStubTest that are provided as `target` to the `multiprocessing.Process` use decorators. This causes problems when pickling them. Hence to resolve this, we manually set the 'start method' of `multiprocessing` to use the `fork` start method.
1 parent ff24d38 commit 74ec067

File tree

25 files changed

+85
-44
lines changed

25 files changed

+85
-44
lines changed

MODULE.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ PYTHON_VERSIONS = [
6868
"3.11",
6969
"3.12",
7070
"3.13",
71+
"3.14.0b2",
7172
]
7273

7374
python = use_extension("@rules_python//python/extensions:python.bzl", "python")

build_handwritten.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ settings:
2222
- '3.11'
2323
- '3.12'
2424
- '3.13'
25+
- '3.14'
2526
version: 1.75.0
2627
configs:
2728
asan:

src/python/grpcio/python_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/python_version.py.template`!!!
1616

17-
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13"]
17+
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13","3.14"]
1818

1919
MIN_PYTHON_VERSION = 3.9
20-
MAX_PYTHON_VERSION = 3.13
20+
MAX_PYTHON_VERSION = 3.14

src/python/grpcio_admin/python_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_admin/python_version.py.template`!!!
1616

17-
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13"]
17+
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13","3.14"]
1818

1919
MIN_PYTHON_VERSION = 3.9
20-
MAX_PYTHON_VERSION = 3.13
20+
MAX_PYTHON_VERSION = 3.14

src/python/grpcio_channelz/python_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_channelz/python_version.py.template`!!!
1616

17-
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13"]
17+
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13","3.14"]
1818

1919
MIN_PYTHON_VERSION = 3.9
20-
MAX_PYTHON_VERSION = 3.13
20+
MAX_PYTHON_VERSION = 3.14

src/python/grpcio_csds/python_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_csds/python_version.py.template`!!!
1616

17-
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13"]
17+
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13","3.14"]
1818

1919
MIN_PYTHON_VERSION = 3.9
20-
MAX_PYTHON_VERSION = 3.13
20+
MAX_PYTHON_VERSION = 3.14

src/python/grpcio_csm_observability/python_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_csm_observability/python_version.py.template`!!!
1616

17-
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13"]
17+
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13","3.14"]
1818

1919
MIN_PYTHON_VERSION = 3.9
20-
MAX_PYTHON_VERSION = 3.13
20+
MAX_PYTHON_VERSION = 3.14

src/python/grpcio_health_checking/python_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/python_version.py.template`!!!
1616

17-
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13"]
17+
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13","3.14"]
1818

1919
MIN_PYTHON_VERSION = 3.9
20-
MAX_PYTHON_VERSION = 3.13
20+
MAX_PYTHON_VERSION = 3.14

src/python/grpcio_observability/python_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_observability/python_version.py.template`!!!
1616

17-
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13"]
17+
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13","3.14"]
1818

1919
MIN_PYTHON_VERSION = 3.9
20-
MAX_PYTHON_VERSION = 3.13
20+
MAX_PYTHON_VERSION = 3.14

src/python/grpcio_reflection/python_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/python_version.py.template`!!!
1616

17-
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13"]
17+
SUPPORTED_PYTHON_VERSIONS = ["3.9","3.10","3.11","3.12","3.13","3.14"]
1818

1919
MIN_PYTHON_VERSION = 3.9
20-
MAX_PYTHON_VERSION = 3.13
20+
MAX_PYTHON_VERSION = 3.14

0 commit comments

Comments
 (0)