Skip to content

Python Modules

Various Python modules are required to use ExaCheck. The current requirements and their versions can be found in the pyproject.toml file. For reference they are listed here with their purpose.

Main Script

These dependencies are used as a part of the main script.

  • Apprise: apprise is used to handle notifications to external services.
  • ExaBGP: exabgp is used to actually talk BGP; ExaCheck communicates with ExaBGP to announce or withdraw routes as needed.
  • Loguru: loguru is used for logging.
  • Pydantic: pydantic is used to validate and store the configuration objects and check results.
  • PyYAML: pyyaml is used to load and parse the configuration file into a dict, ready for Pydantic to consume.
  • setproctitle: setproctitle will change the process title for the child processes.
  • tabulate: tabulate is used to format output into a table.
  • UltraJSON: ujson is used for loading configuration from JSON.

Health Checks

These dependencies are required for the various health checks to work.

  • dnspython: dnspython is used for the dns health check method and to look up hostnames when required for other checks.
  • icmplib: icmplib is used for the icmp health check method.
  • ntplib: ntplib is used for the ntp health check method.
  • HTTPX: HTTPX is used for the http health check method.

icmplib Note

By default, icmplib is used in non-privileged mode. There ARE some requirements for this to work depending on the Linux distribution, see step 2 on the icmplib without privileges page.

Command Line Interface

These dependencies are required for the command line interface.

  • Click: click provides the command line interface.


If you would like to enable Sentry support, the sentry-sdk module must be installed; it is not included as a default dependency. ExaCheck may be installed using the sentry extras tag to include the module, as an example:

python3 -m pip install exacheck[sentry]