Jwt: объект 'module' не имеет атрибута 'encode'
Я получаю модуль не найден ошибка при использовании jwt. Вот как я это заявил:
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)
и это дает эту ошибку:
несвязанный метод encode() должен вызываться с экземпляром JWT в качестве первого аргумента (вместо этого получен экземпляр dict)
Что я делаю не так? Вот информация о версии моей среды Python:
2.7.10 | Anaconda 2.3.0 (64-разрядная версия) | (по умолчанию, 28 мая 2015 г., 16:44:52) [MSC v.1500 64 бит (AMD64)]
Ответы
Ответ 1
Проблема возникает, если у вас установлены JWT и PyJWT. При import jwt
он импортирует библиотеку JWT, а не PyJWT - последняя, которую вы хотите кодировать. Я сделал pip uninstall JWT
pip uninstall PyJWT
pip uninstall JWT
и pip uninstall PyJWT
затем, наконец, pip install PyJWT
. После этого он импортировал правильный модуль и сгенерировал токен! :)
Ответ 2
Вы можете использовать пакет PyJWT, где jwt.encode()
работает нормально (нет необходимости в инициализации или других вещах).
Ответ 3
Я также столкнулся с той же проблемой, потому что я назвал script, из которого я вызывал jwt.encode() как "jwt.py". Поэтому будьте осторожны, именовав скрипты. Старайтесь не использовать имена библиотек.
Ответ 4
Попробовав несколько обходных решений, я создал новый python-ноутбук с тем же кодом и, похоже, работает. Не знаю, в чем проблема. Рассмотрите эту проблему. Большое спасибо тем, кто пытался.
Ответ 5
Используйте вместо этого PyJWT. Я столкнулся с той же проблемой с jwt, поэтому я удалил его и использовал вместо него PyJWT.