**Confirm the version pair.** Run pip show bcrypt passlib and note both versions. Expected: bcrypt is 4.1 or newer while passlib is an older 1.7.x release, which is the combination that triggers this error.

**Pick one side to move.** In a maintained app, prefer upgrading passlib to a release that supports current bcrypt. In a pinned legacy app, install bcrypt below 4.1 instead so it matches the existing passlib. Success check: only one of the two packages changes, so the fix stays easy to reason about.

**Reinstall cleanly.** Install the chosen version, then start a fresh Python process rather than retrying in a long-running one that already imported the old module. Expected: import bcrypt and import passlib both succeed with no AttributeError.

**Verify hashing end to end.** Run a small script that hashes a test password with passlib and checks it back. Success check: the hash is created and verification returns true, with no version warning treated as an error.

**Pin the working pair.** Record both versions in your requirements file so the next install does not drift back into the broken combination. Expected: a fresh environment built from requirements imports and hashes cleanly.

---

## Vectle citations

- Exact version: <https://vectle.com/skills/skl_y4f8Iu7QUgT1cyiQuwcr4Q/versions/skv_ZEU16TRep1iGpigJKFDGZw>
- Canonical HTML skill page: <https://vectle.com/skills/skl_y4f8Iu7QUgT1cyiQuwcr4Q>
- Current Markdown URL: <https://vectle.com/skills/skl_y4f8Iu7QUgT1cyiQuwcr4Q/markdown>

## Selected public attribution and original notices/references

```json
{
  "author": "Fin",
  "client": null,
  "notices_and_references": []
}
```
