15

the exact error I get is :

flask.cli.NoAppException: While importing "application", an ImportError was raised:Traceback      (most recent call last):
File "/home/harshit/.local/lib/python3.6/site-packages/flask/cli.py", line 240, in     locate_app
__import__(module_name)
File "/home/harshit/Documents/project1/application.py", line 18, in <module>
Session(app)
File "/home/harshit/.local/lib/python3.6/site-packages/flask_session/__init__.py", line 54,    in __init__
self.init_app(app)
File "/home/harshit/.local/lib/python3.6/site-packages/flask_session/__init__.py", line 61, in init_app
app.session_interface = self._get_interface(app)
File "/home/harshit/.local/lib/python3.6/site-packages/flask_session/__init__.py", line 93, in _get_interface
config['SESSION_USE_SIGNER'], config['SESSION_PERMANENT'])
File "/home/harshit/.local/lib/python3.6/site-packages/flask_session/sessions.py", line 313, in __init__
from werkzeug.contrib.cache import FileSystemCache
ModuleNotFoundError: No module named 'werkzeug.contrib'

I am trying to import sessions from Flask

davidism
  • 121,510
  • 29
  • 395
  • 339
Harshit
  • 153
  • 1
  • 1
  • 4

7 Answers7

21

Werkzeug 1.0.0 has removed deprecated code, including all of werkzeug.contrib. You should use alternative libraries for new projects. werkzeug.contrib.session was extracted to secure-cookie.


If an existing project you're using needs something from contrib, you'll need to downgrade to Werkzeug<1:

pip3 install Werkzeug<1
davidism
  • 121,510
  • 29
  • 395
  • 339
Aleksey
  • 775
  • 5
  • 14
8

You will need to downgrade werkzeug version from 1.0.0 to 0.16.0

This solved the problem for me.

Just run the following commands in your project:

python3 -m pip uninstall werkzeug

and then

python3 -m pip install werkzeug==0.16.0

Deepam Gupta
  • 2,374
  • 1
  • 30
  • 33
Asad Khan
  • 259
  • 4
  • 7
6

Either downgrade the version to 0.16.0 or replace werkzeug.contrib.cache with cachelib.

I can highly recommend upgrading the package. The deprecated module werkzeug.contrib is very easy to replace!

Install cachelib and replace all imports from:

from werkzeug.contrib.cache import FileSystemCache

to

from cachelib import FileSystemCache
Grey Li
  • 11,664
  • 4
  • 54
  • 64
Stephan Schielke
  • 2,744
  • 7
  • 34
  • 40
0

If you still need deprecated code from werkzeug.contrib, you can downgrade Werkzeug version to less than 1.

pip install Werkzeug<1
davidism
  • 121,510
  • 29
  • 395
  • 339
0

For Python 3.8

python3 -m pip uninstall werkzeug
python3 -m pip install werkzeug
python3 -m pip install flask-session
Ken Roy
  • 915
  • 1
  • 10
  • 15
  • Can you please explain how this addresses the question? I tried this and it didn't do anything. How did this work for you or why did you expect that this would remedy the issue? – trozzel Oct 28 '22 at 14:05
  • this got me to where mine worked because of the package itself -- i typed pip uninstall werkzeug then pip install werkzeug and it worked after that – Jeff Clayton May 26 '23 at 13:03
0

After downgrading werkzeug:

pip install werkzeug==0.16.0

If you get the following: flask 2.0.2 requires Werkzeug>=2.0, but you have werkzeug 0.16.0 which is incompatible

Consider doing:pip install flask==1.1.1

0

For my upgrade (0.15.5 -> 2.2.3) Everything is moved or removed from contrib to other modules. I recomend going to the documentation for your specific version of werkzeug and searching the library you are trying to import. I found mine!

from werkzeug.middleware.profiler import ProfilerMiddleware
app = ProfilerMiddleware(app)
Jake
  • 106
  • 4