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