JWT: 'module' object has no attribute 'encode'

PythonJwt

Python Problem Overview


I am getting a Module not found error when using jwt. Here is how I declared it:

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

The error message says encode is not found in jwt. I did a tab on jwt and found that the encode is a method inside jwt.JWT. I tried changing it to

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

and it gives this error:

> unbound method encode() must be called with JWT instance as first argument (got dict instance instead)

What am I doing it wrong? Here is the version information of my Python environment:

> 2.7.10 |Anaconda 2.3.0 (64-bit)| (default, May 28 2015, 16:44:52) [MSC v.1500 64 bit (AMD64)]

Python Solutions


Solution 1 - Python

The problem arises if you have both JWT and PyJWT installed. When doing import jwt it is importing the library JWT as opposed to PyJWT - the latter is the one you want for encoding. I did pip uninstall JWT and pip uninstall PyJWT then finally pip install PyJWT. After that it imported the correct module and generated the token! :)

Solution 2 - Python

I was also facing the same issue because I had named the script from which I had been calling jwt.encode() as 'jwt.py'. So be careful while naming scripts. Try not to use any library names.

Solution 3 - Python

I solved this problem and @josua's answer is correct I would like to answer with details. In my case, pyJwt was already installed. I was using getream client

And then I was trying to install jwt using: jwt package

And it is a known issue Issue Related to JWT

So the actual problem is a quote from Yoshida:

> Unfortunately, no. As of now both libraries use the same jwt module > namespace and Python's module system cannot resolve import jwt > deterministically.

So I checked my pip freeze and jwt was installed and I fixed this issue by using these commands:

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

And now my code:

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

works fine.

Solution 4 - Python

You can use the PyJWT package, where jwt.encode() works fine (no need for initialization or other kinds of stuff).

Solution 5 - Python

In my case, I just needed to do

pip install pyjwt

Solution 6 - Python

Use PyJWT instead. I faced the same issue with jwt so I uninstalled it and used PyJWT instead.

Solution 7 - Python

Apart from (re)installing the PyJWT dependency through pip which other answers already mention make sure following files are not in the current directory (i.e. pwd) you're either running python in or your .py script:

jwt.py
token.py

Solution 8 - Python

this worked for me:

pip install djangorestframework-jwt==1.11.0

Solution 9 - Python

After trying several workarounds, I created a new Python notebook with the same code and it appears to be working. I am not sure what was the issue before.

Solution 10 - Python

This worked for me:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionArvind KandaswamyView Question on Stackoverflow
Solution 1 - PythonJoshuaView Answer on Stackoverflow
Solution 2 - PythonAaryaView Answer on Stackoverflow
Solution 3 - PythonNilay SinghView Answer on Stackoverflow
Solution 4 - PythonpoxipView Answer on Stackoverflow
Solution 5 - PythoncoderinaView Answer on Stackoverflow
Solution 6 - PythonSameh SharafView Answer on Stackoverflow
Solution 7 - PythonKamil.SView Answer on Stackoverflow
Solution 8 - PythonNabat FarsiView Answer on Stackoverflow
Solution 9 - PythonArvind KandaswamyView Answer on Stackoverflow
Solution 10 - PythonYevgniy ShvartsmanView Answer on Stackoverflow