Django项目中bcrypt系列库引发createsuperuser命令报错求助
Django createsuperuser 报AttributeError: 'bcrypt._bcrypt' has no attribute 'encode_base64' 解决办法
问题根源
你同时安装了多个bcrypt相关包(bcrypt、py-bcrypt、django-bcrypt),版本之间存在冲突。其中django-bcrypt==0.9.2是旧版本,仅兼容py-bcrypt,和新版bcrypt的API不匹配,导致报错。
解决步骤
方案一:用django-bcrypt兼容的旧版依赖
卸载所有冲突包
先清空所有相关包,避免版本混乱:pip uninstall -y bcrypt py-bcrypt django-bcrypt安装兼容版本
只安装django-bcrypt依赖的py-bcrypt,不要装新版bcrypt:pip install py-bcrypt==0.4 django-bcrypt==0.9.2配置密码哈希器
打开项目的settings.py,确保PASSWORD_HASHERS配置包含django_bcrypt的哈希器,放在最前面:PASSWORD_HASHERS = [ 'django_bcrypt.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.Argon2PasswordHasher', 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', ]重新创建超级用户
执行命令:python manage.py createsuperuser
方案二:放弃django-bcrypt,用Django原生bcrypt支持
如果方案一仍有问题,推荐用Django原生支持的bcrypt(无需第三方django-bcrypt包):
卸载所有相关包
pip uninstall -y bcrypt py-bcrypt django-bcrypt安装新版bcrypt
pip install bcrypt==4.0.1配置原生哈希器
修改settings.py的PASSWORD_HASHERS,使用Django自带的BCrypt哈希器:PASSWORD_HASHERS = [ 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'django.contrib.auth.hashers.PBKDF2PasswordHasher', # 保留其他默认哈希器 ]重新执行createsuperuser
python manage.py createsuperuser
内容的提问来源于stack exchange,提问作者Sony Khan
相关产品推荐
相关产品推荐

