I'm now maintaining passlib
PyPI가 Passlib 소유권을 이전하고 포크는 호환성 수정을 이어갑니다
PyPI는 연락이 끊긴 기존 관리자의 Passlib 소유권을 새 관리자에게 이전했습니다. 새 관리자의 포크는 Python 3.13과 bcrypt 호환성 등을 수정해 libpass로 배포되고 있지만, 제안된 설정 API 재설계의 출시 여부는 확인되지 않습니다.
- 주제
본문
Python 비밀번호 해싱 라이브러리 Passlib의 PyPI 소유권이 새 관리자로 넘어갔고, 포크는 Python 3.13과 bcrypt 5 호환성 문제를 고치며 이어지고 있습니다. 다만 관리자가 Reddit에서 제안한 설정 API 재설계가 확정됐다는 근거는 확인되지 않습니다.
Passlib은 여러 해싱 알고리즘으로 비밀번호를 해시하고, 이미 저장된 해시를 검증·관리하는 Python 라이브러리입니다. 새 관리자는 기존 관리자가 연락에 응답하지 않자 PyPI에 소유권 이전을 요청했습니다. PyPI는 여러 차례 연락에도 응답이 없었다며 프로젝트를 PEP 541에 따라 방치된 것으로 판단했고, 새 관리자를 passlib의 소유자로 추가했습니다.
새 관리자는 초기 Reddit 글에서 Python 3.13과 bcrypt 5 호환성 문제를 수정하고 타입 주석을 추가했다고 밝혔습니다. 또 현재처럼 해싱 방식 이름을 문자열로 지정하고 별도 설정값을 전달하는 CryptContext 대신, 각 해싱 방식의 설정을 타입이 있는 객체로 전달하는 API를 제안하며 기존 이용자에게 호환성 의견을 물었습니다. 그는 기존 구조의 추상화와 다중 상속이 코드와 타입 정보를 유지하기 어렵게 만든다고 설명했습니다.
이 API 변경은 당시 제안입니다. 현재 확인되는 포크의 변경 기록에는 Python 3.13 호환성, bcrypt 관련 수정과 타입 개선이 담겨 있지만, 제안한 CryptContext API가 출시됐다는 근거는 없습니다. 저장된 옛 비밀번호 해시를 계속 검증할 수 있는지와 기존 설정을 얼마나 오래 지원할지는 로그인 시스템에 영향을 줄 수 있는 문제입니다. Reddit 댓글에서도 기존 해시 검증과 마이그레이션 부담을 줄이도록 호환 계층과 폐기 경고를 두자는 의견이 나왔습니다.
패키지 이름도 살펴볼 필요가 있습니다. PyPI에서 passlib은 1.7.4를 최신 버전으로 표시하며, 마지막 공개일은 2020년 10월 9일입니다. 새 관리자의 포크는 libpass라는 별도 이름으로 배포됐고, PyPI는 2026년 10월 17일 기준 libpass 1.9.4를 최신으로 표시합니다. 따라서 Passlib의 소유권 이전과 포크의 배포 이력은 같은 변화로 묶이지 않습니다.
유지보수와 재설계는 별개의 단계입니다
관리자는 포크에서 2026년 10월 17일 공개한 1.9.4 버전의 변경 내역에 Argon2와 bcrypt 백엔드 로직의 회귀 수정이 적혀 있습니다. 앞선 기록에는 Python 3.13 호환성과 bcrypt 버전 감지 개선도 있습니다. 이런 유지보수 작업은 진행됐지만, 대규모 API 재설계는 별도 결정입니다. 프로젝트의 현재 기록만으로는 재설계 여부나 기존 API의 지원 기간을 확정할 수 없습니다.
Reddit 반응
- @Immediate_Wheel1953 — 새 타입 객체 API를 선호하지만, 한두 번의 릴리스 동안 기존 문자열 이름도 호환 계층으로 지원하자고 제안했습니다. 특히 오래된 해시를 계속 인식하는 verify와 needs_update 동작을 지켜야 로그인 문제를 줄일 수 있다고 설명했습니다.
자료: Reddit, PyPI, GitHub / 정리·해설: Trawling
참고 자료
- GitHub - notypecheck/passlib: Passlib fork · GitHub — https://github.com/notypecheck/passlib
- passlib/CHANGELOG.md at main · notypecheck/passlib · GitHub — https://github.com/notypecheck/passlib/blob/main/CHANGELOG.md
- passlib · PyPI — https://pypi.org/project/passlib/
- libpass · PyPI — https://pypi.org/project/libpass/