JWT: 'module' object has no attribute 'encode'
PythonJwtPython 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
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