Подтвердить что ты не робот

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)]

4b9b3361

Ответ 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.