| # 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. |
| [project] |
| name = "pyiceberg" |
| version = "0.11.0" |
| description = "Apache Iceberg is an open table format for huge analytic datasets" |
| authors = [{ name = "Apache Software Foundation", email = "dev@iceberg.apache.org" }] |
| requires-python = ">=3.10.0,<4.0.0" |
| readme = "README.md" |
| license = "Apache-2.0" |
| license-files = ["LICENSE", "NOTICE"] |
| classifiers = [ |
| "Operating System :: OS Independent", |
| "Programming Language :: Python :: 3.10", |
| "Programming Language :: Python :: 3.11", |
| "Programming Language :: Python :: 3.12", |
| "Programming Language :: Python :: 3.13", |
| ] |
| dependencies = [ |
| "mmh3>=4.0.0,<6.0.0", |
| "requests>=2.20.0,<3.0.0", |
| "click>=7.1.1,<9.0.0", |
| "rich>=10.11.0,<15.0.0", |
| "strictyaml>=1.7.0,<2.0.0", # CVE-2020-14343 was fixed in 5.4. |
| "pydantic>=2.0,<3.0,!=2.4.0,!=2.4.1,!=2.12.0,!=2.12.1", # 2.4.0, 2.4.1, 2.12.0, 2.12.1 has a critical bug |
| "fsspec>=2023.1.0", |
| "pyparsing>=3.1.0,<4.0.0", |
| "tenacity>=8.2.3,<10.0.0", |
| "pyroaring>=1.0.0,<2.0.0", |
| "cachetools>=5.5,<8.0", |
| "zstandard>=0.13.0,<1.0.0" |
| ] |
| |
| [project.urls] |
| Homepage = "https://py.iceberg.apache.org/" |
| Repository = "https://github.com/apache/iceberg-python" |
| |
| [project.scripts] |
| pyiceberg = "pyiceberg.cli.console:run" |
| |
| [project.optional-dependencies] |
| pyarrow = [ |
| "pyarrow>=17.0.0", |
| "pyiceberg-core>=0.5.1,<0.9.0", |
| ] |
| pandas = [ |
| "pandas>=1.0.0", |
| "pyarrow>=17.0.0", |
| ] |
| duckdb = [ |
| "duckdb>=0.5.0,<2.0.0", |
| "pyarrow>=17.0.0", |
| ] |
| ray = [ |
| "ray>=2.10.0,<3.0.0", |
| "pyarrow>=17.0.0", |
| "pandas>=1.0.0", |
| ] |
| bodo = ["bodo>=2025.7.4"] |
| daft = ["daft>=0.5.0"] |
| polars = ["polars>=1.21.0,<2"] |
| snappy = ["python-snappy>=0.6.0,<1.0.0"] |
| hive = ["thrift>=0.13.0,<1.0.0"] |
| hive-kerberos = [ |
| "thrift>=0.13.0,<1.0.0", |
| "thrift-sasl>=0.4.3", |
| "kerberos>=1.3.1,<2", |
| ] |
| s3fs = ["s3fs>=2023.1.0"] |
| glue = ["boto3>=1.24.59"] |
| adlfs = ["adlfs>=2024.7.0"] |
| dynamodb = ["boto3>=1.24.59"] |
| bigquery = ["google-cloud-bigquery>=3.33.0,<4"] |
| sql-postgres = [ |
| "sqlalchemy>=2.0.18,<3", |
| "psycopg2-binary>=2.9.6", |
| ] |
| sql-sqlite = ["sqlalchemy>=2.0.18,<3"] |
| gcsfs = ["gcsfs>=2023.1.0"] |
| rest-sigv4 = ["boto3>=1.24.59"] |
| hf = ["huggingface-hub>=0.24.0"] |
| pyiceberg-core = ["pyiceberg-core>=0.5.1,<0.9.0"] |
| datafusion = ["datafusion>=51,<52"] |
| gcp-auth = ["google-auth>=2.4.0"] |
| entra-auth = ["azure-identity>=1.25.1"] |
| geoarrow = ["geoarrow-pyarrow>=0.2.0"] |
| |
| [dependency-groups] |
| dev = [ |
| "pytest==9.0.2", |
| "pytest-checkdocs==2.14.0", |
| "prek>=0.2.1,<0.4", |
| "pytest-lazy-fixtures==1.4.0", |
| "fastavro==1.12.1", |
| "coverage[toml]>=7.4.2,<8", |
| "requests-mock==1.12.1", |
| "moto[server]>=5.0.2,<6", |
| "typing-extensions==4.15.0", |
| "pytest-mock==3.15.1", |
| "pyspark[connect]==4.0.1", |
| "protobuf==6.33.5", # match Spark Connect's gencode |
| "cython>=3.0.0", |
| "deptry>=0.14,<0.25", |
| "docutils!=0.21.post1", |
| "mypy-boto3-glue>=1.28.18", |
| "mypy-boto3-dynamodb>=1.28.18", |
| "google-cloud-bigquery>=3.33.0,<4", |
| "pyarrow-stubs>=20.0.0.20251107", # Remove when pyarrow >= 23.0.0 https://github.com/apache/arrow/pull/47609 |
| "sqlalchemy>=2.0.18,<3", |
| ] |
| # for mkdocs |
| docs = [ |
| "mkdocs==1.6.1", |
| "griffe==2.0.0", |
| "jinja2==3.1.6", |
| "mkdocstrings==1.0.3", |
| "mkdocstrings-python==2.0.3", |
| "mkdocs-literate-nav==0.6.2", |
| "mkdocs-autorefs==1.4.4", |
| "mkdocs-gen-files==0.6.0", |
| "mkdocs-material==9.7.1", |
| "mkdocs-material-extensions==1.3.1", |
| "mkdocs-section-index==0.3.10", |
| ] |
| # for experimentation |
| notebook = [ |
| "jupyterlab>=4.0.0", |
| ] |
| |
| [tool.uv] |
| default-groups = [ |
| "dev", |
| ] |
| |
| [build-system] |
| requires = ["setuptools>=80", "wheel", "Cython>=3.0.0"] |
| build-backend = "setuptools.build_meta" |
| |
| [tool.pytest.ini_options] |
| testpaths = ["tests"] |
| |
| markers = [ |
| "unmarked: marks a test as a unittest", |
| "s3: marks a test as requiring access to s3 compliant storage (use with --aws-access-key-id, --aws-secret-access-key, and --endpoint args)", |
| "adls: marks a test as requiring access to adls compliant storage (use with --adls.account-name, --adls.account-key, and --adls.endpoint args)", |
| "integration: marks integration tests against Apache Spark", |
| "gcs: marks a test as requiring access to gcs compliant storage (use with --gs.token, --gs.project, and --gs.endpoint)", |
| "benchmark: collection of tests to validate read/write performance before and after a change", |
| ] |
| |
| # Turns a warning into an error |
| filterwarnings = [ |
| "error", |
| # Ignore Python version deprecation warning from google.api_core while we still support 3.10 |
| "ignore:You are using a Python version.*which Google will stop supporting:FutureWarning:google.api_core", |
| # Python 3.13 sqlite3 module ResourceWarnings for unclosed database connections |
| "ignore:unclosed database in <sqlite3.Connection object*:ResourceWarning", |
| # Ignore Ray subprocess cleanup warnings |
| "ignore:unclosed file:ResourceWarning", |
| "ignore:subprocess.*is still running:ResourceWarning", |
| ] |
| |
| [tool.mypy] |
| mypy_path = "python" |
| no_implicit_optional = true |
| namespace_packages = false |
| warn_redundant_casts = true |
| warn_unreachable = true |
| warn_unused_ignores = true |
| disallow_any_generics = true |
| disallow_untyped_defs = true |
| implicit_reexport = false |
| ignore_missing_imports = true |
| |
| [tool.coverage.run] |
| source = ['pyiceberg/'] |