Skip to content

Commit bb124d0

Browse files
infra: add python 3.14 support (#3299)
<!-- Thanks for opening a pull request! --> <!-- In the case this PR will resolve an issue, please replace ${GITHUB_ISSUE_ID} below with the actual Github issue id. --> <!-- Closes #3123 --> # Rationale for this change Adds prebuilt support for python 3.14 Free-threaded is still not supported for now Closes #3123 for standard python ## Are these changes tested? test using: `PYTHON=3.14 make test` `PYTHON=3.14 make test-integration ` Python Build Release Candidate workflow was run: https://github.com/afeldman1/iceberg-python/actions/runs/25267237725 ## Are there any user-facing changes? Just support of python 3.14 --------- Co-authored-by: Kevin Liu <kevinjqliu@users.noreply.github.com>
1 parent 714c24f commit bb124d0

6 files changed

Lines changed: 84 additions & 70 deletions

File tree

.github/workflows/pypi-build-artifacts.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ jobs:
5151
3.11
5252
3.12
5353
3.13
54+
3.14
5455
5556
- name: Install UV
5657
uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1
@@ -75,7 +76,7 @@ jobs:
7576
env:
7677
# Ignore 32 bit architectures
7778
CIBW_ARCHS: "auto64"
78-
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10,<3.14"
79+
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10,<3.15"
7980
# Keep these in sync with Python CI job `cibw-dev-env-smoke-test`
8081
# in .github/workflows/python-ci.yml to catch import-time regressions early.
8182
CIBW_BEFORE_TEST: "uv sync --directory {project} --only-group dev --no-install-project"

.github/workflows/python-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
max-parallel: 15
5353
fail-fast: true
5454
matrix:
55-
python: ['3.10', '3.11', '3.12', '3.13']
55+
python: ['3.10', '3.11', '3.12', '3.13', '3.14']
5656

5757
steps:
5858
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

.github/workflows/svn-build-artifacts.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ jobs:
5151
3.11
5252
3.12
5353
3.13
54+
3.14
5455
5556
- name: Install UV
5657
uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1
@@ -69,7 +70,7 @@ jobs:
6970
env:
7071
# Ignore 32 bit architectures
7172
CIBW_ARCHS: "auto64"
72-
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10,<3.14"
73+
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10,<3.15"
7374
CIBW_BEFORE_TEST: "uv sync --directory {project} --only-group dev --no-install-project"
7475
CIBW_TEST_COMMAND: "uv run --directory {project} pytest tests/avro/test_decoder.py"
7576
# Skip free-threaded (PEP 703) builds until we evaluate decoder_fast support

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ classifiers = [
2929
"Programming Language :: Python :: 3.11",
3030
"Programming Language :: Python :: 3.12",
3131
"Programming Language :: Python :: 3.13",
32+
"Programming Language :: Python :: 3.14",
3233
]
3334
dependencies = [
3435
"mmh3>=4.0.0,<6.0.0",

tests/conftest.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3029,14 +3029,22 @@ def pyarrow_table_with_promoted_types(pyarrow_schema_with_promoted_types: "pa.Sc
30293029
)
30303030

30313031

3032+
def pytest_configure(config: pytest.Config) -> None:
3033+
# Disable Ray's automatic uv environment propagation to workers.
3034+
# When tests are invoked via `uv run`, Ray detects the wrapper and tries
3035+
# to package the working directory for remote workers, which is unnecessary
3036+
# and problematic in local single-node test mode
3037+
# See https://docs.ray.io/en/latest/_modules/ray/_private/worker.html
3038+
os.environ["RAY_ENABLE_UV_RUN_RUNTIME_ENV"] = "0"
3039+
3040+
30323041
@pytest.fixture(scope="session")
30333042
def ray_session() -> Generator[Any, None, None]:
30343043
"""Fixture to manage Ray initialization and shutdown for tests."""
30353044
import ray
30363045

30373046
ray.init(
30383047
ignore_reinit_error=True,
3039-
runtime_env={"working_dir": None}, # Prevent Ray from serializing the working directory to workers
30403048
)
30413049
yield ray
30423050
ray.shutdown()

0 commit comments

Comments
 (0)