# Python > https://docs.errora.org/en/platforms/python ## Install ```bash pip install "sentry-sdk[django]" # or [flask], [fastapi], [celery], or plain sentry-sdk ``` ## Initialize ```python import sentry_sdk sentry_sdk.init( dsn=os.environ["SENTRY_DSN"], environment=os.environ.get("ENV", "production"), release=os.environ.get("APP_VERSION"), traces_sample_rate=0.2, # tracing profiles_sample_rate=1.0, # profiling (of sampled transactions) enable_logs=True, # structured logs send_default_pii=False, attach_stacktrace=True, ) ``` The SDK auto-detects Django, Flask, FastAPI, Celery, Redis, SQLAlchemy, `requests` and more. Unhandled exceptions are captured with no further code. ### Django Call `sentry_sdk.init()` at the bottom of `settings.py` (or in `wsgi.py`/`asgi.py` before the application object is built). Nothing else is required — middleware, view errors, ORM spans and template spans are instrumented automatically. ### Celery Initialize inside a `celeryd_init`/`worker_process_init` signal handler so every forked worker gets its own SDK client: ```python from celery.signals import celeryd_init @celeryd_init.connect def init_sentry(**_kwargs): sentry_sdk.init(dsn=..., traces_sample_rate=0.2) ``` ## Capturing manually ```python with sentry_sdk.push_scope() as scope: scope.set_tag("area", "billing") scope.set_context("invoice", {"id": invoice.id, "total": invoice.total}) sentry_sdk.capture_exception(exc) sentry_sdk.capture_message("Reconciliation drifted", level="warning") sentry_sdk.set_user({"id": user.id, "username": user.username}) ``` ## Logs ```python import logging logger = logging.getLogger(__name__) logger.warning("retrying payment", extra={"order_id": order.id, "attempt": 3}) ``` With `enable_logs=True` the SDK forwards standard-library log records to Errora as structured logs, keeping `extra` fields as typed attributes and tagging them with the active trace. See [Logs](/en/products/logs). ## Cron monitors ```python from sentry_sdk.crons import monitor @monitor(monitor_slug="nightly-invoices") def nightly_invoices(): ... ``` With Celery beat, decorate the task or use `sentry_sdk.crons.capture_checkin` directly. See [Cron monitoring](/en/products/crons). ## Metrics ```python sentry_sdk.metrics.incr("orders.created", 1, tags={"plan": "pro"}) sentry_sdk.metrics.distribution("orders.total_toman", order.total, unit="none") ``` See [Metrics](/en/products/metrics). ## AI monitoring If you use the OpenAI, Anthropic or LangChain integrations, the SDK emits `gen_ai.*` spans that Errora projects into [AI monitoring](/en/products/insights) — agent runs, per-model token usage and tool calls — with no extra configuration beyond `traces_sample_rate`. ## Verify ```python sentry_sdk.capture_exception(Exception("Errora smoke test")) ```