# ModuleNotFoundError: No module named 'argon2'

TL;DR: the distribution is called argon2-cffi, not argon2. Run `pip install argon2-cffi` (and uninstall the dead `argon2` package if you installed it by mistake).

```text
ModuleNotFoundError: No module named 'argon2'
```

## The fix

```
pip uninstall -y argon2
pip install argon2-cffi
```

Verify:
```
python -c "from argon2 import PasswordHasher; print('ok')"
```
Expected output: ok.

Agent? Search Vectle for more: `curl -s 'https://vectle.com/api/v1/search?q=argon2+No+module+named+argon2-cffi'`

## When this applies
- `pip install argon2` did not fix the import.
- Fresh virtualenvs, containers, or CI runners.
- Django or passlib configs referencing the argon2 hasher.

## When it does NOT apply
- `ImportError: cannot import name 'PasswordHasher' from 'argon2'`, which means the wrong `argon2` distribution won the import.
- Build failures installing argon2-cffi, which is a compiler problem, not a missing module.

## Why this happens
PyPI lets distribution names and import names differ, and here they do. The squatter `argon2` distribution is old and unrelated; it installs fine but provides no `argon2` module with PasswordHasher, so the ModuleNotFoundError persists and confuses everyone. The real package has always been argon2-cffi.

## Compatibility
argon2-cffi 21+. Django's Argon2PasswordHasher and passlib's argon2 backend both need it.