JWT: 'module' object has no attribute 'encode'
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! :)
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.
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.
You can use the PyJWT package, where jwt.encode()
works fine (no need for initialization or other kinds of stuff).