Skip to content

Latest commit

 

History

History
79 lines (65 loc) · 3.52 KB

File metadata and controls

79 lines (65 loc) · 3.52 KB

Dependency Compatibility Matrix

BenchBox ships a single source of dependency metadata in pyproject.toml. The resolved versions are captured in uv.lock, which is consumed by CI and local development through uv. Dependency validation now happens via an explicit check so changes cannot drift silently.

Supported Python Versions

  • Declared range: >=3.9,<3.15
  • Solver markers (from uv.lock):
    • python_full_version >= '3.14' and platform_python_implementation != 'PyPy'
    • python_full_version == '3.13.*' and platform_python_implementation != 'PyPy'
    • python_full_version >= '3.13' and platform_python_implementation == 'PyPy'
    • python_full_version == '3.12.*'
    • python_full_version == '3.11.*'
    • python_full_version == '3.10.*'
    • python_full_version < '3.10'

These markers mirror the lock file resolution and offer early warning if a future interpreter release needs bespoke packaging rules.

Core Dependencies

Package Specifier
sqlglot >=20.0.0
pytest-xdist >=3.8.0
pytest-benchmark >=5.1.0
pytest-cov >=6.2.1
click >=8.0.0
rich >=13.0.0
psutil >=5.9.0
pydantic >=2.0.0
pyyaml >=6.0.0
packaging >=24.0
requests >=2.31.0
duckdb >=1.0.0,<2.0.0

DuckDB is capped below the next major (<2.0.0) across the development, all, duckdb, and explorer dependency paths so a future 2.x API break surfaces in CI rather than silently during uv sync. Browser results.duckdb snapshots stay attachable by @duckdb/duckdb-wasm: DuckDB 1.x writers default to the v1.0.0 on-disk storage format (version 64), which the WASM reader attaches regardless of the writer's version (a newer format is only emitted when a writer explicitly opts into storage_compatibility_version, which the snapshot builder does not).

Optional Extras

Extra Dependencies
all clickhouse-driver>=0.2.0, databricks-sql-connector>=2.0.0, google-cloud-bigquery>=3.0.0, google-cloud-storage>=2.0.0, redshift-connector>=2.0.0, snowflake-connector-python>=3.0.0, boto3>=1.20.0, cloudpathlib>=0.15.0
bigquery google-cloud-bigquery>=3.0.0, google-cloud-storage>=2.0.0, cloudpathlib>=0.15.0
clickhouse clickhouse-driver>=0.2.0
cloud databricks-sql-connector>=2.0.0, google-cloud-bigquery>=3.0.0, google-cloud-storage>=2.0.0, redshift-connector>=2.0.0, snowflake-connector-python>=3.0.0, boto3>=1.20.0, cloudpathlib>=0.15.0
databricks databricks-sql-connector>=2.0.0, cloudpathlib>=0.15.0
dev pytest>=8.0.0, pytest-cov>=4.1.0, pytest-benchmark>=4.0.0, pytest-xdist>=3.0.0, duckdb>=1.0.0,<2.0.0, tox>=4.13.0
docs sphinx>=7.2.0, sphinx-rtd-theme>=2.0.0, myst-parser>=2.0.0
redshift redshift-connector>=2.0.0, boto3>=1.20.0, cloudpathlib>=0.15.0
snowflake snowflake-connector-python>=3.0.0, cloudpathlib>=0.15.0

Running the Validation Command

Use the new Makefile target to validate dependencies and show the compatibility matrix:

make dependency-check            # Validate lock vs. pyproject specs
make dependency-check ARGS=--matrix  # Also print compatibility summary

Under the hood this calls python -m benchbox.utils.dependency_validation, which parses both files and fails fast if a declared dependency has no matching locked version. Incorporate the command into feature branches whenever dependencies change, and expect CI to run it automatically.