'ImportError: Could not import 'rest_framework_simplejwt.authentication.JWTAuthentication'
I am trying to deploy a django app on GCP but when i try to make migrations it gives me this error:
ImportError: Could not import 'rest_framework_simplejwt.authentication.JWTAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ModuleNotFoundError: No module named 'rest_framework_simplejwt'.
Settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated'
],
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
]
}
SIMPLE_JWT = {
'ALGORITHM': 'HS256',
'SIGNING_KEY': SECRET_KEY,
'VERIFYING_KEY': None,
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=800),
'REFRESH_TOKEN_LIFETIME': timedelta(days=2),
}
OAUTH2_PROVIDER = {
'ACCESS_TOKEN_EXPIRE_SECONDS': 60 * 15,
'OAUTH_SINGLE_ACCESS_TOKEN': True,
'OAUTH_DELETE_EXPIRED': True
}
requirements.txt
django-cors-headers
pyjwt
djangorestframework
djangorestframework-jwt==1.11.0
What is it that I am missing ?
UPDATE I installed rest_framework_simplejwt and now the error shifted to :
No module named 'rest_framework_simplejwt.tokens'
Solution 1:[1]
It seems you are confusing two packages. djangorestframework-jwt
which you have in your requirements.txt is no longer maintained. It provides the rest_framework_jwt.authentication.JSONWebTokenAuthentication
authentication class.
However, the one you are actually using, rest_framework_simplejwt.authentication.JWTAuthentication
, comes from the pip package djangorestframework-simplejwt
So you need to update your requirements.txt. Remove djangorestframework-jwt
and add djangorestframework-simplejwt
Solution 2:[2]
for me the djangorestframework-simplejwt
upgrade from 4.4.0
to current latest version 4.6.0
fixed the problem.
pip3 install --upgrade djangorestframework-simplejwt
Solution 3:[3]
If anyone still encountering this error, this is the requirements for djangorestframework-simplejwt:
Python (3.6, 3.7, 3.8)
Django (2.0, 2.1, 2.2, 3.0)
Django REST Framework (3.8, 3.9, 3.10)
I downgraded Django & DRF and the problem is solved for me.
pip uninstall django
pip uninstall djangorestframework
pip install --upgrade django==3.0
pip install --upgrade djangorestframework==3.10
pip install djangorestframework-simplejwt
Solution 4:[4]
I encountered same error when attempting to deploy on Heroku
Upon investigating I found 2 issues in my case:
1] requirements.txt --> This file was not updated and therefore 'git add' and 'git commit' did not pickup the new requirement for djangorestframework-simplejwt
So the solution here was to do a fresh pip freeze > requirements.txt, git add/commit and confirm that on Heroku
2] Secondly I found that Heroku was not finding the v4.6.0 which my python3.8 had installed locally. Instead, I had to edit the requirements.txt to v4.4.0 (current on the pypi.org), redo the git add/commit before this problem was resolved
Solution 5:[5]
For me issue solverd by restarting virtual environment
Solution 6:[6]
My issue was also having installed both djangorestframework-jwt and djangorestframework_simplejwt. After unistalling the former my issue was resolved.
Solution 7:[7]
You need to restart your machine and install
- pip install djangorestframework-jwt
- pip install djangorestframework-simplejwt
please ensure those lib's install or not
Solution 8:[8]
If anyone is still running into this issue using VS Code and running their Django app inside a Docker container, I solved the issue by downgrading my Python version to 3.9, instead of 3.10, and then rebuilding my container.
In your Dockerfile
make sure the FROM python:3.9
matches the current supported version of python on the docs page: https://django-rest-framework-simplejwt.readthedocs.io/en/latest/index.html , in this case, version 3.9
. Mine was set to 3.10
before, which at the time of this writing, isn't supported. Then re-build your docker image.
docker-compose down
docker-compose up -d --build
Also, if you are using pipenv to manage your packages, change your python version in your Pipfile
, python_version = "3.9"
. Then run pipenv install
to install the change.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Neoheurist |
Solution 2 | Ali Aref |
Solution 3 | Jan Franco |
Solution 4 | Dharman |
Solution 5 | ???? ???????? |
Solution 6 | Carla Aluvai |
Solution 7 | shine |
Solution 8 | Evan Bloemer |