jwt:'module'对象没有属性'encode'

时间:2015-10-18 13:25:42

标签: python jwt

使用jwt时,我发现Module not found错误。以下是我宣布的方式:

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

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

class myModel {
    public static function all()
    {
        return 1;
    }
}

class myClass {
    public $models;

    public function __construct()
    {
        $this->models->myModel = new myModel;
        $results = $this->models->myModel::all();
    }
}

$result = new myClass;

并且它给出了这个错误:

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

我做错了什么?这是我的python环境的版本信息:

  

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

8 个答案:

答案 0 :(得分:75)

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

答案 1 :(得分:4)

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

然后我尝试使用jwt package

安装jwt

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

所以实际的问题是来自Yoshida的引文:

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

所以我检查了点冻结并安装了jwt,并通过使用以下命令解决了此问题:

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

现在是我的代码:

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

工作正常。

答案 2 :(得分:3)

我也遇到了同样的问题,因为我已经将我称之为jwt.encode()的脚本命名为' jwt.py'。在命名脚本时要小心。尽量不要使用任何库名。

答案 3 :(得分:1)

就我而言,我只需要做

pip install pyjwt

答案 4 :(得分:0)

在尝试了几个解决方法之后,我创建了一个具有相同代码的新python笔记本,它似乎正在工作。不确定之前是什么问题。考虑关闭此问题。非常感谢那些尝试过的人。

答案 5 :(得分:0)

改为使用PyJWT。我在jwt上遇到了同样的问题,因此我将其卸载并使用了PyJWT。

答案 6 :(得分:0)

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

.py

答案 7 :(得分:0)

这对我有用:

pip install djangorestframework-jwt==1.11.0