[project] name = "feast" description = "Python SDK for Feast" readme = "README.md" requires-python = ">=3.10.0" license = "Apache-2.0" license-files = ["LICENSE"] classifiers = [ "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10" ] dynamic = [ "version", ] dependencies = [ "click>=7.0.0,<9.0.0", "colorama>=0.3.9,<1", "dill~=0.3.0", "protobuf>=4.24.0", "Jinja2>=2,<4", "jsonschema", "mmh3", "numpy>=2.0.0,<3", "pandas>=1.4.3,<3", "pyarrow>=21.0.0", "pydantic>=2.10.6", "pygments>=2.12.0,<3", "PyYAML>=5.4.0,<7", "requests", "SQLAlchemy[mypy]>1", "tabulate>=0.8.0,<1", "tenacity>=7,<9", "toml>=0.10.0,<1", "tqdm>=4,<5", "typeguard>=4.0.0", "fastapi>=0.68.0", "uvicorn[standard]>=0.30.6,<=0.34.0", "uvicorn-worker", "gunicorn; platform_system != 'Windows'", "dask[dataframe]>=2024.2.1", "prometheus_client", "psutil", "bigtree>=0.19.2", "pyjwt", ] [project.optional-dependencies] aws = ["boto3==1.38.27", "fsspec<=2024.9.0", "aiobotocore>2,<3"] azure = [ "azure-storage-blob>=0.37.0", "azure-identity>=1.6.1", "SQLAlchemy>=1.4.19", "pyodbc>=4.0.30", "pymssql<2.3.3" ] cassandra = ["cassandra-driver>=3.24.0,<4"] clickhouse = ["clickhouse-connect>=0.7.19"] couchbase = ["couchbase==4.3.2", "couchbase-columnar==1.0.0"] delta = ["deltalake<1.0.0"] docling = ["docling==2.27.0"] duckdb = ["ibis-framework[duckdb]>=10.0.0"] elasticsearch = ["elasticsearch>=8.13.0"] faiss = ["faiss-cpu>=1.7.0,<=1.10.0"] gcp = [ "google-api-core>=1.23.0,<3", "googleapis-common-protos>=1.52.0,<2", "google-cloud-bigquery[pandas]>=2,<4", "google-cloud-bigquery-storage >= 2.0.0,<3", "google-cloud-datastore>=2.16.0,<3", "google-cloud-storage>=1.34.0,<3", "google-cloud-bigtable>=2.11.0,<3", "fsspec<=2024.9.0", ] ge = ["great_expectations>=0.15.41,<1"] go = ["cffi>=1.15.0"] grpcio = [ "grpcio>=1.56.2,<=1.62.3", "grpcio-reflection>=1.56.2,<=1.62.3", "grpcio-health-checking>=1.56.2,<=1.62.3", ] hazelcast = ["hazelcast-python-client>=5.1"] hbase = ["happybase>=1.2.0,<3"] ibis = [ "ibis-framework>=10.0.0", "poetry-core<2", "poetry-dynamic-versioning", ] ikv = [ "ikvpy>=0.0.36", ] k8s = ["kubernetes"] image = [ "feast[pytorch]", "timm>=0.6.0", "Pillow>=8.0.0", "scikit-learn>=1.0.0", ] milvus = [ "pymilvus>2.5", "milvus-lite==2.4.12", "feast[setuptools]" ] mssql = ["ibis-framework[mssql]>=10.0.0"] mysql = ["pymysql", "types-PyMySQL"] opentelemetry = ["prometheus_client", "psutil"] spark = ["pyspark>=4.0.0"] trino = ["trino>=0.305.0,<0.400.0", "regex"] postgres = ["psycopg[binary,pool]==3.2.5"] # psycopg[c] install requires a system with a C compiler, python dev headers, & postgresql client dev headers # https://www.psycopg.org/psycopg3/docs/basic/install.html#local-installation postgres-c = ["psycopg[c,pool]==3.2.5"] pytorch = ["torch>=2.7.0", "torchvision>=0.22.1"] qdrant = ["qdrant-client>=1.12.0"] rag = [ "transformers>=4.36.0", "datasets>=3.6.0", ] ray = [ 'ray>=2.47.0; python_version == "3.10"', 'codeflare-sdk>=0.31.1; python_version > "3.10"' ] redis = [ "redis>=4.2.2,<5", "hiredis>=2.0.0,<3", ] singlestore = ["singlestoredb<1.8.0"] snowflake = [ "snowflake-connector-python[pandas]>=3.7,<4", ] sqlite_vec = ["sqlite-vec==v0.1.6"] mcp = ["fastapi_mcp"] dbt = ["dbt-artifacts-parser"] ci = [ "build", "virtualenv==20.23.0", "cryptography>=43.0,<44", "dbt-artifacts-parser", "ruff>=0.8.0", "mypy-protobuf>=3.1", "grpcio-tools>=1.56.2,<=1.62.3", "grpcio-testing>=1.56.2,<=1.62.3", # FastAPI does not correctly pull starlette dependency on httpx see thread(https://github.com/tiangolo/fastapi/issues/5656). "httpx==0.27.2", "minio==7.2.11", "mock==2.0.0", "moto<5", "mypy>=1.4.1,<1.11.3", "urllib3>=2.6.3,<3", "psutil==5.9.0", "py>=1.11.0", # https://github.com/pytest-dev/pytest/issues/10420 "pytest>=6.0.0,<8", "pytest-asyncio<=0.24.0", "pytest-cov", "pytest-xdist", "pytest-benchmark>=3.4.1,<4", "pytest-lazy-fixture==0.6.3", "pytest-timeout==1.4.2", "pytest-ordering~=0.6.0", "pytest-mock==1.10.4", "pytest-env", "Sphinx>4.0.0,<7", "sqlglot[rs]>=23.4", "testcontainers==4.9.0", "python-keycloak==4.2.2", "pre-commit<3.3.2", "assertpy==1.1", "pip-tools", "pybindgen==0.22.0", "types-protobuf~=3.19.22", "python-dateutil==2.9.0", "types-python-dateutil", "types-pytz", "types-PyYAML", "types-redis", "types-requests<2.31.0", "types-setuptools", "types-tabulate", "virtualenv<20.24.2", "feast[aws, azure, cassandra, clickhouse, couchbase, delta, docling, duckdb, elasticsearch, faiss, gcp, ge, go, grpcio, hazelcast, hbase, ibis, ikv, image, k8s, mcp, milvus, mssql, mysql, opentelemetry, spark, trino, postgres, pytorch, qdrant, rag, ray, redis, singlestore, snowflake, sqlite_vec]" ] nlp = ["feast[docling, image, milvus, pytorch, rag]"] dev = ["feast[ci]"] docs = ["feast[ci]"] # used for the 'feature-server' container image build minimal = ["feast[aws, gcp, snowflake, redis, go, mysql, postgres-c, opentelemetry, grpcio, k8s, duckdb, mcp, milvus]"] minimal-sdist-build = [ "feast[minimal]", "feast[ibis]", "meson<1.7.2", "pybindgen==0.22.0", "sphinx!=4.0.0", "types_psutil<7.0.0.20250401", # sqlalchemy[mypy] dep "greenlet!=0.4.17", # numpy deps "meson-python<0.16.0,>=0.15.0", "Cython<3.1,>=0.29.34", "flit_core<4,>=3.8", "patchelf>=0.11.0", "scikit-build-core>=0.10", "hatch-fancy-pypi-readme>=23.2.0", "hatch-vcs==0.4.0", "hatchling>=1.6.0,<2", "calver<2025.4.1", ] setuptools = [ # https://amitylearning.vercel.app/?question=git-1742419854670&update=1742342400027 "setuptools>=60,<81", ] [project.urls] Homepage = "https://github.com/feast-dev/feast" [[project.authors]] name = "Feast" [project.scripts] feast = "feast.cli.cli:cli" [build-system] requires = [ "pybindgen==0.22.0", # https://amitylearning.vercel.app/?question=git-1742419854670&update=1742342400027 "setuptools>=60,<81", "setuptools_scm>=6.2", "sphinx!=4.0.0", "wheel>=0.46.2", ] [tool.setuptools] packages = {find = {where = ["sdk/python"], exclude = ["java", "infra", "sdk/python/tests", "ui"]}} [tool.setuptools_scm] # Add Support for parsing tags that have a prefix containing '/' (ie 'sdk/go') to setuptools_scm. # Regex modified from default tag regex in: # https://github.com/pypa/setuptools_scm/blob/2a1b46d38fb2b8aeac09853e660bcd0d7c1bc7be/src/setuptools_scm/config.py#L9 tag_regex = "^(?:[\\/\\w-]+)?(?P[vV]?\\d+(?:\\.\\d+){0,2}[^\\+]*)(?:\\+.*)?$" [tool.ruff] line-length = 88 target-version = "py310" include = ["*.py", "*.pyi"] [tool.ruff.format] # exclude a few common directories in the root of the project exclude = [ ".eggs", ".git", ".hg", ".mypy_cache", ".tox", ".venv", "_build", "buck-out", "build", "dist", "pb2.py", ".pyi", "protos", "sdk/python/feast/embedded_go/lib"]