diff --git a/providers/ibm/db2/README.rst b/providers/ibm/db2/README.rst index 789ce2016d8c3..258b447319000 100644 --- a/providers/ibm/db2/README.rst +++ b/providers/ibm/db2/README.rst @@ -34,9 +34,14 @@ Requirements This provider requires the following packages: -- ``ibm-db>=3.0.0`` - IBM Db2 Python driver +- ``ibm-db>=3.2.0`` - IBM Db2 Python driver - ``ibm-db-sa>=0.4.0`` - SQLAlchemy dialect for Db2 +IBM does not ship a Db2 client for Linux ARM64. ``ibm-db`` has no ``aarch64`` wheel +and cannot be built from source there, so installers skip both packages on that +architecture. The provider itself is pure Python and still installs, but opening a +Db2 connection then fails with ``ModuleNotFoundError``. + Configuration ------------- diff --git a/providers/ibm/db2/docs/index.rst b/providers/ibm/db2/docs/index.rst index b194c4ca611a5..86f4ba086a1c2 100644 --- a/providers/ibm/db2/docs/index.rst +++ b/providers/ibm/db2/docs/index.rst @@ -96,16 +96,16 @@ Requirements The minimum Apache Airflow version supported by this provider distribution is ``2.11.0``. -========================================== ================== +========================================== ========================================== PIP package Version required -========================================== ================== +========================================== ========================================== ``apache-airflow`` ``>=2.11.0`` ``apache-airflow-providers-common-compat`` ``>=1.12.0`` ``apache-airflow-providers-common-sql`` ``>=1.32.0`` -``ibm-db`` ``>=3.2.0`` -``ibm-db-sa`` ``>=0.4.0`` +``ibm-db`` ``>=3.2.0; platform_machine != "aarch64"`` +``ibm-db-sa`` ``>=0.4.0; platform_machine != "aarch64"`` ``methodtools`` ``>=0.4.7`` -========================================== ================== +========================================== ========================================== Optional dependencies --------------------- diff --git a/providers/ibm/db2/pyproject.toml b/providers/ibm/db2/pyproject.toml index 8153b93fd3e89..a2f904c9dcd18 100644 --- a/providers/ibm/db2/pyproject.toml +++ b/providers/ibm/db2/pyproject.toml @@ -62,8 +62,13 @@ dependencies = [ "apache-airflow>=2.11.0", "apache-airflow-providers-common-compat>=1.12.0", "apache-airflow-providers-common-sql>=1.32.0", - "ibm-db>=3.2.0", - "ibm-db-sa>=0.4.0", + # IBM ships no Db2 client for Linux ARM64, so ibm-db has no aarch64 wheel and its + # sdist build fails there with `NameError: name 'arch_' is not defined`, which + # breaks the linux/arm64 CI image. + # ibm-db-sa is pure Python, but it declares ibm-db as a dependency, so installing + # it on aarch64 would pull ibm-db back in. It carries the same marker. + "ibm-db>=3.2.0; platform_machine != 'aarch64'", + "ibm-db-sa>=0.4.0; platform_machine != 'aarch64'", "methodtools>=0.4.7", ] diff --git a/uv.lock b/uv.lock index d4f97bd3b9923..180821db7cb64 100644 --- a/uv.lock +++ b/uv.lock @@ -662,7 +662,7 @@ name = "aiohttp-cors" version = "0.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp" }, + { name = "aiohttp", marker = "python_full_version < '3.15'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/d89e846a5444b3d5eb8985a6ddb0daef3774928e1bfbce8e84ec97b0ffa7/aiohttp_cors-0.8.1.tar.gz", hash = "sha256:ccacf9cb84b64939ea15f859a146af1f662a6b1d68175754a07315e305fb1403", size = 38626, upload-time = "2025-03-31T14:16:20.048Z" } wheels = [ @@ -5952,8 +5952,8 @@ dependencies = [ { name = "apache-airflow" }, { name = "apache-airflow-providers-common-compat" }, { name = "apache-airflow-providers-common-sql" }, - { name = "ibm-db" }, - { name = "ibm-db-sa" }, + { name = "ibm-db", marker = "platform_machine != 'aarch64'" }, + { name = "ibm-db-sa", marker = "platform_machine != 'aarch64'" }, { name = "methodtools" }, ] @@ -5979,8 +5979,8 @@ requires-dist = [ { name = "apache-airflow-providers-common-compat", editable = "providers/common/compat" }, { name = "apache-airflow-providers-common-sql", editable = "providers/common/sql" }, { name = "apache-airflow-providers-openlineage", marker = "extra == 'openlineage'", editable = "providers/openlineage" }, - { name = "ibm-db", specifier = ">=3.2.0" }, - { name = "ibm-db-sa", specifier = ">=0.4.0" }, + { name = "ibm-db", marker = "platform_machine != 'aarch64'", specifier = ">=3.2.0" }, + { name = "ibm-db-sa", marker = "platform_machine != 'aarch64'", specifier = ">=0.4.0" }, { name = "methodtools", specifier = ">=0.4.7" }, ] provides-extras = ["openlineage"] @@ -11355,7 +11355,7 @@ name = "colorful" version = "0.5.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "colorama", marker = "python_full_version < '3.15' and sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/31/109ef4bedeb32b4202e02ddb133162457adc4eb890a9ed9c05c9dd126ed0/colorful-0.5.8.tar.gz", hash = "sha256:bb16502b198be2f1c42ba3c52c703d5f651d826076817185f0294c1a549a7445", size = 209361, upload-time = "2025-10-29T11:53:21.663Z" } wheels = [ @@ -18221,9 +18221,9 @@ name = "opencensus" version = "0.11.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "google-api-core" }, - { name = "opencensus-context" }, - { name = "six" }, + { name = "google-api-core", marker = "python_full_version < '3.15'" }, + { name = "opencensus-context", marker = "python_full_version < '3.15'" }, + { name = "six", marker = "python_full_version < '3.15'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/15/a7/a46dcffa1b63084f9f17fe3c8cb20724c4c8f91009fd0b2cfdb27d5d2b35/opencensus-0.11.4.tar.gz", hash = "sha256:cbef87d8b8773064ab60e5c2a1ced58bbaa38a6d052c41aec224958ce544eff2", size = 64966, upload-time = "2024-01-03T18:04:07.085Z" } wheels = [ @@ -21747,14 +21747,14 @@ name = "ray" version = "2.57.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "filelock" }, - { name = "jsonschema" }, - { name = "msgpack" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "pyyaml" }, - { name = "requests" }, + { name = "click", marker = "python_full_version < '3.15'" }, + { name = "filelock", marker = "python_full_version < '3.15'" }, + { name = "jsonschema", marker = "python_full_version < '3.15'" }, + { name = "msgpack", marker = "python_full_version < '3.15'" }, + { name = "packaging", marker = "python_full_version < '3.15'" }, + { name = "protobuf", marker = "python_full_version < '3.15'" }, + { name = "pyyaml", marker = "python_full_version < '3.15'" }, + { name = "requests", marker = "python_full_version < '3.15'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/0a/18/2e608519b656ff1aa61492e9dcca965a4703965e1ccb0409eecabfd76a51/ray-2.57.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e14f60ac542f3e9136b10e30cd6602f4e8ba48e482983d3b9221193dd7a91ae5", size = 66760376, upload-time = "2026-08-11T00:20:34.684Z" }, @@ -21779,20 +21779,20 @@ wheels = [ [package.optional-dependencies] default = [ - { name = "aiohttp" }, - { name = "aiohttp-cors" }, - { name = "colorful" }, - { name = "grpcio" }, - { name = "opencensus" }, - { name = "opentelemetry-exporter-prometheus" }, - { name = "opentelemetry-proto" }, - { name = "opentelemetry-sdk" }, - { name = "prometheus-client" }, - { name = "py-spy" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "smart-open" }, - { name = "virtualenv" }, + { name = "aiohttp", marker = "python_full_version < '3.15'" }, + { name = "aiohttp-cors", marker = "python_full_version < '3.15'" }, + { name = "colorful", marker = "python_full_version < '3.15'" }, + { name = "grpcio", marker = "python_full_version < '3.15'" }, + { name = "opencensus", marker = "python_full_version < '3.15'" }, + { name = "opentelemetry-exporter-prometheus", marker = "python_full_version < '3.15'" }, + { name = "opentelemetry-proto", marker = "python_full_version < '3.15'" }, + { name = "opentelemetry-sdk", marker = "python_full_version < '3.15'" }, + { name = "prometheus-client", marker = "python_full_version < '3.15'" }, + { name = "py-spy", marker = "python_full_version < '3.15'" }, + { name = "pydantic", marker = "python_full_version < '3.15'" }, + { name = "requests", marker = "python_full_version < '3.15'" }, + { name = "smart-open", marker = "python_full_version < '3.15'" }, + { name = "virtualenv", marker = "python_full_version < '3.15'" }, ] [[package]] @@ -22914,8 +22914,8 @@ name = "secretstorage" version = "3.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography", marker = "python_full_version >= '3.14' or platform_machine != 'arm64' or sys_platform != 'darwin'" }, - { name = "jeepney", marker = "python_full_version >= '3.14' or platform_machine != 'arm64' or sys_platform != 'darwin'" }, + { name = "cryptography", marker = "(python_full_version >= '3.14' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine != 'arm64' and sys_platform == 'darwin') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "jeepney", marker = "(python_full_version >= '3.14' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine != 'arm64' and sys_platform == 'darwin') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } wheels = [ @@ -23114,7 +23114,7 @@ name = "smart-open" version = "8.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "wrapt" }, + { name = "wrapt", marker = "python_full_version < '3.15'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/76/53/9c513747547fd595d5c143259129ea8b9c3ea2f6b7bb9dcea2b1966ded3c/smart_open-8.0.1.tar.gz", hash = "sha256:18b1c4496003c6902be17c15f032b5c319f307c89c6ae9e6b028b508bed8b2cf", size = 61882, upload-time = "2026-07-15T13:56:10.492Z" } wheels = [