OpenTelemetry Python API package. Current version: 1.40.0 (Mar 2026). TWO separate packages: 'opentelemetry-api' (interfaces + no-op implementations) and 'opentelemetry-sdk' (actual implementation). Installing only opentelemetry-api produces silent no-ops — all tracing calls succeed but nothing is recorded or exported. Must also install opentelemetry-sdk AND configure a TracerProvider AND call trace.set_tracer_provider(). Exporters (OTLP, Jaeger, Zipkin) are separate packages. All packages must be the same version.
pip install opentelemetry-api opentelemetry-sdkVerified import paths — ran on the pinned version, not inferred.
OpenTelemetry Python — TracerProvider setup with ConsoleSpanExporter.
pip install opentelemetry-api opentelemetry-sdk
Always call trace.set_tracer_provider(provider) after creating TracerProvider, before any trace.get_tracer() calls.
pip install opentelemetry-exporter-otlp for production. Use ConsoleSpanExporter for local development.
Pin all packages to same version: pip install 'opentelemetry-api==1.40.0' 'opentelemetry-sdk==1.40.0' 'opentelemetry-exporter-otlp==1.40.0'
pip install opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-sqlalchemy etc.
Call provider.shutdown() in app shutdown handler or use atexit.register(provider.shutdown).
Resource.create({'service.name': 'my-service'}) or set OTEL_SERVICE_NAME env var.