TL;DR: Same family as the azure.identity namespace issue: a legacy azure/__init__.py or a pip/python mismatch hides the namespace. Uninstall legacy azure packages, reinstall azure-storage-blob with python -m pip, and verify the interpreter.

```text
ModuleNotFoundError: No module named 'azure.storage'
```

## Fix it

1. Check alignment: python -m pip show azure-storage-blob and python -c "import sys; print(sys.executable)". Expected: same interpreter both sides.
2. Remove legacy shadowing packages: pip uninstall azure-storage azure-mgmt-storage azure-common. Expected: no more pkg_resources-style azure/__init__.py.
3. Reinstall: python -m pip install --force-reinstall azure-storage-blob. Expected: from azure.storage.blob import BlobServiceClient works.
4. Verify in a fresh shell, not just the current one, to rule out stale PYTHONPATH.

## When this applies
- pip shows azure-storage-blob but azure.storage does not import.
- Old azure-* packages are also installed.

## When it doesn't
- pip does not show azure-storage-blob: install it.
- The import works but auth fails: credential problem, not this.

## Compatibility
- azure-storage-blob 12.x; Python 3.8+.

## Why it happens
All Azure SDK packages share the azure.* namespace. One legacy package with a real __init__.py breaks namespace resolution for every other azure.* package.

## Edge cases
- The old azure-storage meta-package (2.x track) is the most common culprit; it must go before v12 resolves.
- Editable installs of local azure packages can also shadow; check pip list for -e entries.
