You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安装PyJWT 2.4.0后import jwt提示无法解析导入模块问题

问题原因

触发报错的核心原因分两类,还有一个隐藏的版本兼容问题会在导入修复后触发运行错误:

  • 依赖安装错误/冲突:最常见的情况是装了名为jwt的废弃第三方包,而非官方的PyJWT;或是本地虚拟环境未激活、IDE解释器选错、环境中残留旧版本PyJWT/python-jose等同功能依赖导致解析冲突;Docker场景下多是requirements.txt未正确声明PyJWT版本,或是构建镜像时用了缓存导致依赖未正确安装。
  • API版本不兼容:PyJWT 2.0及以上版本调整了返回值类型,jwt.encode()直接返回字符串而非1.x版本的字节对象,你现有代码末尾的.decode('utf-8')调用在2.4.0版本下会抛出属性错误。
修复方案

1. 清理冲突依赖,安装正确版本

先卸载所有冲突包:

pip uninstall -y jwt PyJWT python-jose

重装指定版本的官方PyJWT包:

pip install PyJWT==2.4.0

确认requirements.txt中明确写入PyJWT==2.4.0,注意包名不要写错成jwt。如果是IDE报导入解析错误,手动切换Python解释器到你安装依赖的虚拟环境即可。

2. 修正JWT生成代码适配2.4.0版本

移除多余的decode调用,修改后的函数代码如下:

import jwt
import datetime
from django.conf import settings

def generate_access_token(user):
    payload = {
        'user_id':user.id,
        'exp':datetime.datetime.utcnow() + datetime.timedelta(minutes=60),
        'iat' : datetime.datetime.utcnow()
    }
    return jwt.encode(payload, settings.SECRET_KEY, algorithm='HS256')

3. Docker部署场景校验

原有Dockerfile逻辑没有问题,重新构建镜像时加无缓存参数避免旧依赖层残留:

docker build --no-cache -t django-jwt-app .

如果容器启动仍报导入错误,进入容器执行pip list | grep PyJWT,确认包版本为2.4.0即可。


内容的提问来源于stack exchange,提问作者Hamza Nasri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:27:15