Installation
Requirements: Python 3.10+
There are three ways to install metapod depending on your environment.
From PyPI (released version)
If you have internet access and want the latest stable release:
pip install metapod-probes
This gives you file scanners (CSV, JSON, Parquet, Avro), Excel, dbt, SQLite, and Python transform probes - no database drivers needed.
From source (local development)
If you cloned the repository or want to modify the code locally:
# Clone the repository
git clone https://github.com/mario-ambrosino/metapod.git
cd metapod
# Editable install - code changes take effect immediately
pip install -e "."
# With development tools (pytest, ruff)
pip install -e ".[dev]"
# With specific extras (e.g. Azure + Soda)
pip install -e ".[azure,soda]"
# Verify
metapod list-probes
The -e (editable) flag means Python uses your local source directory
directly. You don’t need to reinstall after modifying code.
Running without installing - if you just want to try it without pip:
git clone https://github.com/mario-ambrosino/metapod.git
cd metapod
python cli.py list-probes
python cli.py run "sqlite.*" --config config.yaml
This works because cli.py adds the project root to sys.path.
However, the metapod command won’t be available in your PATH.
Air-gapped install (no internet)
For environments where outbound traffic is blocked (corporate networks, secure zones, Azure private endpoints):
Step 1 - On a machine WITH internet, build the offline bundle:
git clone https://github.com/mario-ambrosino/metapod.git
cd metapod
bash scripts/build_airgapped.sh # core only
bash scripts/build_airgapped.sh --extras azure # with Azure SDKs
This creates dist/metapod-probes-airgapped-X.Y.Z.tar.gz containing
the wheel + all dependencies + install scripts.
Step 2 - Transfer the tarball (USB, internal share, whatever works).
Step 3 - On the air-gapped machine:
Linux / Mac:
tar xzf metapod-probes-airgapped-*.tar.gz
cd metapod-probes-airgapped-*/
bash install.sh
Windows PowerShell:
Expand-Archive metapod-probes-airgapped-*.tar.gz
cd metapod-probes-airgapped-*/
. .\install.ps1
For Presidio PII detection in air-gapped mode, also download the spaCy model on the connected machine:
pip download en_core_web_lg -d ./models/
# Transfer models/ to air-gapped machine, then:
pip install --no-index --find-links ./models/ en_core_web_lg
Database extras
pip install 'metapod-probes[oracle]' # Oracle (oracledb)
pip install 'metapod-probes[postgres]' # PostgreSQL (psycopg2)
pip install 'metapod-probes[snowflake]' # Snowflake
pip install 'metapod-probes[bigquery]' # Google BigQuery
pip install 'metapod-probes[mysql]' # MySQL / MariaDB
pip install 'metapod-probes[db2]' # IBM DB2
pip install 'metapod-probes[duckdb]' # DuckDB
pip install 'metapod-probes[mongodb]' # MongoDB
pip install 'metapod-probes[elasticsearch]' # Elasticsearch
Cloud extras
pip install 'metapod-probes[azure]' # Azure (ADLS, Blob, ADF, File Share)
pip install 'metapod-probes[aws]' # AWS (S3)
Quality, profiling, and compliance extras
pip install 'metapod-probes[soda]' # Soda Core (data quality checks)
pip install 'metapod-probes[ydata]' # YData Profiling (statistics, anomalies)
pip install 'metapod-probes[presidio]' # Presidio PII (~75 entity types)
Everything
pip install 'metapod-probes[all]'
Verify
metapod list-probes
# Should show 197 probes across 49 sources