Skip to content

Runtime dependency install can upgrade boto3/botocore and break aiobotocore integrations #168539

Description

@patrickvorgers

The problem

A runtime dependency install appears to be able to upgrade the shared AWS SDK packages globally, leaving Home Assistant with an incompatible aiobotocore / botocore combination.

This breaks integrations using the shared aiobotocore client path, including:

  • Cloudflare R2
  • IDrive e2

Related issues:

Confirmed broken runtime state

An affected runtime ended up with:

aiobotocore 2.21.1
boto3 1.42.91
botocore 1.42.91
s3transfer 0.16.0

But aiobotocore 2.21.1 requires:
botocore >=1.37.0,<1.37.2

pipdeptree reports:

aiobotocore==2.21.1
 - botocore [required: >=1.37.0,<1.37.2, installed: 1.42.91]

This explains the setup failure:

TypeError: ClientArgsCreator.compute_endpoint_resolver_builtin_defaults()
missing 1 required positional argument: 's3_disable_express_session_auth'

Image vs runtime

The published Home Assistant images I inspected contain the expected compatible AWS package set:

aiobotocore 2.21.1
boto3 1.37.1
botocore 1.37.1
s3transfer 0.11.3

However, docker diff homeassistant on the affected system shows that package files under /usr/local/lib/python3.14/site-packages were changed after container creation. The original boto3, botocore, and s3transfer dist-info directories were removed/replaced, and newer AWS package files were added/changed.

So this does not appear to be caused by the published image itself. It appears to be a runtime dependency install/overlay.

Possible trigger: aioaquacell

aioaquacell==0.2.0 is a strong candidate for introducing the broad AWS dependency upgrade.

Home Assistant pulls it in through:

homeassistant.components.aquacell
→ aioaquacell==0.2.0

aioaquacell==0.2.0 declares broad requirements on:

aiobotocore
boto3
botocore
pycognito

I reproduced the broad dependency upgrade in my HA dev environment by running:

python -m pip install --force-reinstall --upgrade aioaquacell==0.2.0

Before reinstall:

aiobotocore 2.21.1
boto3 1.37.1
botocore 1.37.1
s3transfer 0.11.3

After reinstall:

aiobotocore 3.4.0
boto3 1.42.84
botocore 1.42.84
s3transfer 0.16.0

So aioaquacell==0.2.0 can pull the AWS SDK stack forward.

The affected HA runtime ended up slightly differently:

aiobotocore 2.21.1
boto3 1.42.91
botocore 1.42.91

That suggests boto3 / botocore were upgraded globally, while aiobotocore remained pinned or was restored to the HA-pinned 2.21.1.

Expected behavior

Runtime dependency installation should not leave Home Assistant with an incompatible global AWS SDK package set.

In particular, boto3 / botocore should not be upgraded beyond the version range supported by the installed aiobotocore.

Actual behavior

After runtime package mutation, Home Assistant can end up with:

aiobotocore 2.21.1
botocore 1.42.x

This breaks integrations using aiobotocore, including Cloudflare R2 and IDrive e2.

Possible fix directions

  • Constrain aioaquacell / Aquacell requirements so they cannot pull incompatible AWS SDK versions.
  • Prevent runtime dependency installs from mutating globally installed packages into a state that violates already-installed Core requirements.

What version of Home Assistant Core has the issue?

core-2026.4.3

What was the last working version of Home Assistant Core?

core-2026.3.3

What type of installation are you running?

Home Assistant OS

Integration causing the issue

core / aquacell

Link to integration documentation on our website

No response

Diagnostics information

No response

Example YAML snippet

Anything in the logs that might be useful for us?

Additional information

So far, reports seem limited to ARM-based systems, but it is not yet clear whether architecture is actually part of the cause or just a coincidence.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions