ModuleNotFoundError: No module named 'argon2'
Explains why `from argon2 import PasswordHasher` throws ModuleNotFoundError: No module named 'argon2' and how to fix it with `pip install argon2-cffi`. Use when argon2 was never installed or the wrong package name was used. Not for PasswordHasher import errors when argon2 is installed.
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).
ModuleNotFoundError: No module named 'argon2'The fix
pip uninstall -y argon2
pip install argon2-cffiVerify:
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 argon2did 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 wrongargon2distribution 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.
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.