Mac虚拟环境下pyJWT使用RS384编码报算法不存在错误问询
- 原Windows环境使用pyJWT无异常,更换Mac设备后,基于Python 3.9、PyCharm搭配虚拟环境开发,尝试生成RS384算法编码的JWT时出现报错
- 查阅pyJWT官方说明,RS384属于官方支持算法,相同逻辑代码此前在Windows设备可正常运行
- 虚拟环境创建后通过pip3安装pyJWT,运行代码触发报错:
NotImplementedError: Algorithm 'RS384' could not be found. Do you have cryptography installed? - 最初认为pyJWT会自动拉取对应依赖,报错后手动安装cryptography库,核查pip3 list输出、PyCharm虚拟环境已安装库列表,均显示相关依赖已安装,但问题未解决,运行最简测试代码仍复现报错
测试代码如下:
import jwt encoded = jwt.encode({"some": "payload"}, "secret", algorithm="RS384") print(encoded)
相关参考截图:
- 错误截图:

- pip3包列表截图:

- PyCharm环境配置截图:

排查包冲突问题
PyPI存在同名的jwt第三方包,和官方维护的PyJWT完全不兼容,如果之前执行过pip3 install jwt,就会出现依赖识别异常。先执行命令清理所有冲突包:pip3 uninstall -y jwt PyJWT cryptography
清理完成后,安装带crypto扩展的官方PyJWT版本,会自动匹配兼容的cryptography版本:pip3 install pyjwt[crypto]排查解释器路径不匹配问题
Mac环境下PyCharm常出现终端pip安装路径和项目实际运行的解释器路径不一致的问题:终端用全局pip3装了包,但项目虚拟环境里没有对应依赖,哪怕pip list能看到包,实际运行环境没加载。
排查方式:在测试代码开头加入如下代码,打印当前运行环境的Python解释器绝对路径:import sys print(sys.executable)复制打印出的解释器路径,用该解释器直接调用pip安装依赖,例如打印路径为
/Users/yourname/project/venv/bin/python,则执行:/Users/yourname/project/venv/bin/python -m pip install pyjwt[crypto]
禁止直接用全局pip3安装依赖,避免包装到非当前运行的环境中。排查cryptography库加载异常问题
Mac环境如果缺少底层编译依赖,cryptography可能出现安装残缺的情况:pip列表能看到包,但实际RSA相关模块无法导入。
排查方式:在当前运行环境执行如下导入测试:from cryptography.hazmat.primitives.asymmetric import rsa如果导入报错,先通过homebrew安装底层依赖:
brew install openssl rust
安装完成后强制重装cryptography:pip install --force-reinstall cryptography后续注意事项
解决算法找不到的报错后,需要注意RS384是RSA非对称算法,不能用示例里的普通字符串"secret"作为密钥,需要传入符合格式要求的RSA私钥才能正常生成JWT。
内容的提问来源于stack exchange,提问作者sallou

