使用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)]
答案 0 :(得分:75)
如果您同时安装了JWT和PyJWT,则会出现问题。在执行import jwt
时,它导入库JWT而不是PyJWT - 后者是您想要编码的那个。我做了pip uninstall JWT
和pip 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)
答案 6 :(得分:0)
除了通过pip(重新)安装PyJWT依赖项之外,其他答案已经提到要确保当前目录(例如pwd
)中的以下文件不是,您正在运行{或您的python
脚本中的{1}}:
.py
答案 7 :(得分:0)
这对我有用:
pip install djangorestframework-jwt==1.11.0