{"library":"apache-airflow-providers-common-compat","title":"Apache Airflow Common Compatibility Provider","description":"The `apache-airflow-providers-common-compat` package provides a compatibility layer for Apache Airflow, enabling seamless migration from Airflow 2 to Airflow 3. It utilizes lazy imports that first attempt Airflow 3 paths and then fall back to Airflow 2 paths, abstracting away version differences. This provider aims to centralize and replace scattered version-specific conditional imports within other Airflow providers. The current version is 1.14.2, and Airflow providers generally follow independent release cadences, adhering to SemVer.","language":"python","status":"active","last_verified":"Wed May 20","install":{"commands":["pip install apache-airflow-providers-common-compat"],"cli":null},"imports":["from airflow.providers.common.compat.sdk import BaseOperator","from airflow.providers.common.compat.sdk import conf","from airflow.providers.common.compat.sdk import task"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\n\n# This example demonstrates how a custom Airflow component (e.g., an operator or hook)\n# would use the common.compat.sdk to ensure compatibility across Airflow versions.\n# In a real scenario, this would typically be part of a custom provider package's code.\n\n# Ensure Airflow environment variables are set for a minimal run, e.g., for 'conf'\n# In a live Airflow environment, these are usually handled by the Airflow setup.\nif 'AIRFLOW_HOME' not in os.environ:\n    os.environ['AIRFLOW_HOME'] = os.path.expanduser('~/airflow')\n\ntry:\n    # Attempt to import common Airflow components via the compatibility layer\n    from airflow.providers.common.compat.sdk import BaseOperator, conf, task\n    print(\"Successfully imported BaseOperator, conf, and task via common.compat.sdk\")\n\n    # Example usage (simplified, as these are typically used within an operator/hook definition)\n    # The actual 'conf' object would be more complex and used for configuration access\n    print(f\"Retrieved BaseOperator from compat layer: {BaseOperator.__name__}\")\n    print(f\"Retrieved conf object from compat layer: {conf}\")\n    print(f\"Retrieved task decorator from compat layer: {task}\")\n\n    # Minimal example of using a compat-imported BaseOperator (not runnable as a full DAG)\n    class MyCompatOperator(BaseOperator):\n        def __init__(self, **kwargs):\n            super().__init__(task_id='my_compat_task', **kwargs)\n\n    my_op_instance = MyCompatOperator()\n    print(f\"Instantiated a custom operator using compat BaseOperator: {my_op_instance.task_id}\")\n\nexcept ImportError as e:\n    print(f\"Failed to import from common.compat.sdk: {e}\")\n    print(\"Ensure 'apache-airflow-providers-common-compat' is installed and Airflow is properly set up.\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")","lang":"python","description":"This quickstart demonstrates how a developer building a custom Airflow provider or plugin would use `airflow.providers.common.compat.sdk` to import core Airflow components like `BaseOperator`, `conf`, or `@task` in a way that is compatible across different major versions of Apache Airflow (e.g., Airflow 2.x and 3.x). This code snippet shows successful imports and basic instantiation of a class using `BaseOperator` obtained from the compatibility layer.","tag":null,"tag_description":null,"last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":"reviewed","tag_description":"minor failures on some runtimes or slightly older test data","last_tested":"2026-05-20","installed_version":"1.7.1","pypi_latest":"1.14.3","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":90,"avg_install_s":22.3,"avg_import_s":4.93,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.32,"mem_mb":64.5,"disk_size":"244.0M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.66,"mem_mb":64.3,"disk_size":"236.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":24,"import_time_s":3.21,"mem_mb":64.5,"disk_size":"242M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.31,"mem_mb":64.3,"disk_size":"235M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.51,"mem_mb":69.8,"disk_size":"263.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":6.22,"mem_mb":69.5,"disk_size":"256.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":22.9,"import_time_s":4.94,"mem_mb":69.8,"disk_size":"262M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.13,"mem_mb":69.5,"disk_size":"254M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.13,"mem_mb":67.6,"disk_size":"254.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.48,"mem_mb":68.4,"disk_size":"246.3M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":18.1,"import_time_s":5.12,"mem_mb":67.6,"disk_size":"253M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":6.03,"mem_mb":68.4,"disk_size":"245M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.59,"mem_mb":68.3,"disk_size":"255.9M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.13,"mem_mb":69.1,"disk_size":"248.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":18.1,"import_time_s":4.66,"mem_mb":68.3,"disk_size":"255M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.42,"mem_mb":69.1,"disk_size":"248M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"210.8M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"apache-airflow-providers-common-compat","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":28.4,"import_time_s":null,"mem_mb":null,"disk_size":"206M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"apache-airflow-providers-common-compat","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]}}