【问题标题】:JWT: 'module' object has no attribute 'encode'JWT:“模块”对象没有属性“编码”
【发布时间】:2016-01-16 20:33:11
【问题描述】:

我在使用 jwt 时收到 Module not found 错误。这是我声明它的方式:

def create_jwt_token():
    payload = {
        "iat": int(time.time())
    }

    shared_key = REST_API_TOKEN
    payload['email'] = EMAIL
    payload['password'] = PASSWORD

    jwt_string = jwt.encode(payload, shared_key)
    encoded_jwt = urllib.quote_plus(jwt_string)  # URL encode the JWT string

    return encoded_jwt

错误消息说在jwt 中找不到编码。我在jwt 上做了一个标签,发现编码是jwt.JWT 中的一个方法。我尝试将其更改为

jwt_string = jwt.JWT.encode(payload, shared_key)

它给出了这个错误:

必须使用 JWT 实例作为第一个参数调用未绑定方法 encode()(改为获取 dict 实例)

我做错了什么?下面是我的 Python 环境的版本信息:

2.7.10 |Anaconda 2.3.0(64 位)| (默认,2015 年 5 月 28 日,16:44:52)[MSC v.1500 64 位 (AMD64)]

【问题讨论】:

  • 你需要初始化JWT对象。 jwt.JWT().encode(...) 有效吗?
  • jwt.JWT().encode(...) 不起作用。还有如何初始化 JWT 对象?

标签: python jwt


【解决方案1】:

这对我有用:

pip uninstall Flask-JWT && pip install Flask-JWT

【讨论】:

    【解决方案2】:

    这对我有用:

    pip install djangorestframework-jwt==1.11.0
    

    【讨论】:

      【解决方案3】:

      就我而言,我只需要这样做

      pip install pyjwt
      

      【讨论】:

        【解决方案4】:

        除了(重新)通过 pip 安装 PyJWT 依赖项之外,其他答案已经提到确保以下文件不在当前目录(即pwd)中,您正在运行python在或您的.py 脚本中:

        jwt.py
        token.py
        

        【讨论】:

          【解决方案5】:

          我解决了这个问题,@josua 的回答是正确的,我想详细回答一下。就我而言,已经安装了 pyJwt。我用的是getream client

          然后我尝试使用以下方式安装 jwt:jwt package

          这是一个已知问题Issue Related to JWT

          所以实际的问题是引用Yoshida:

          很遗憾,没有。截至目前,两个库都使用相同的 jwt 模块 命名空间和 Python 的模块系统无法解析 import jwt 确定性地。

          所以我检查了我的 pip freeze 并安装了 jwt,并使用以下命令解决了这个问题:

          pip uninstall jwt==1.0.0
          pip uninstall PyJWT
          pip install PyJWT
          

          现在是我的代码:

          encoded = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
          

          工作正常。

          【讨论】:

          • 我收到以下错误“attributeerror module 'jwt' has no attribute 'get unverified header'”。然后我删除了 jwt 并安装了 PyJWT,它开始正常工作了。
          【解决方案6】:

          在尝试了几种解决方法后,我使用相同的代码创建了一个新的 Python 笔记本,它似乎可以正常工作。我不确定之前的问题是什么。

          【讨论】:

          • 您的笔记本是否使用不同的虚拟环境?该环境中的库可能会有所不同。
          【解决方案7】:

          请改用PyJWT。我在使用 jwt 时遇到了同样的问题,所以我将其卸载并改用 PyJWT。

          【讨论】:

            【解决方案8】:

            如果您同时安装了 JWT 和 PyJWT,就会出现问题。在执行 import jwt 时,它正在导入库 JWT 而不是 PyJWT - 后者是您想要编码的库。我做了pip uninstall JWT 和pip uninstall PyJWT 然后最后pip install PyJWT。之后,它导入了正确的模块并生成了令牌! :)

            【讨论】:

            • 是的,就是这样。错误地安装了一个名为 plain "jwt" 的包,它与 "PyJWT" 的 JWT 模块搞砸了。
            • 目前 jwt 和 pyjwt 都在报告来自 pip install 的相同版本,10.0.1。我必须来这里仔细检查我是否真的想要pyjwt
            • 确保 flask-jwt 模块也被卸载。 pip install PyJWT=1.6.4 的另一件事使它对我来说非常完美。 pip install PyJWT=1.6.4
            • 对我来说是 PyJWT 版本 github.com/jpadilla/pyjwt/blob/master/… 必须从版本 2 降级
            【解决方案9】:

            我也面临同样的问题,因为我将调用 jwt.encode() 的脚本命名为“jwt.py”。所以在命名脚本时要小心。尽量不要使用任何库名称。

            【讨论】:

            • 非常重要并解决了我的问题
            • 就是这样!!!谢谢!!!不要将本地文件命名为库文件!
            【解决方案10】:

            您可以使用PyJWT package,其中jwt.encode() 工作正常(无需初始化或其他类型的东西)。

            【讨论】:

              猜你喜欢
              • 2021-04-21
              • 2016-10-10
              • 2017-03-29
              • 2013-02-13
              • 2010-11-18
              • 2019-01-03
              • 2017-05-19
              • 2013-02-01
              相关资源
              最近更新 更多