ImportError: cannot import name 'escape' from 'jinja2'
Fixes ImportError: cannot import name 'escape' from 'jinja2' Use when jinja2>=3.1 with old Flask or old direct imports Not for: you want autoescaping in templates (that is a different feature)
How to fix ImportError: cannot import name 'escape' from 'jinja2'
jinja2 3.1 removed escape; Flask below 2.2 still imports it from jinja2. Fix: upgrade Flask (pip install -U flask, needs >= 2.2.2), or change your own from jinja2 import escape to from markupsafe import escape. markupsafe is already a jinja2 dependency, so no new install needed.
The exact error
ImportError: cannot import name 'escape' from 'jinja2'Fix it
Your code:
from jinja2 import escape->from markupsafe import escape. Expected: import worksTraceback inside flask itself:
pip install -U flask(>= 2.2.2). Expected: flask imports escape from markupsafeStopgap:
pip install "jinja2<3.1". Expected: old jinja2 has escape (not recommended)
When this applies
jinja2>=3.1 with old Flask or old direct imports
When this does NOT apply
you want autoescaping in templates (that is a different feature)
Versions
jinja2 >= 3.1 with Flask < 2.2
Why it happens
jinja2 moved escape to markupsafe for separation of concerns in 3.1.
Edge cases
Flask 2.2.2 is the minimum that handles jinja2 3.1; 2.2.0/2.2.1 still break.