I recently deployed my project that includes Flask==1.0.2
and Jinja2>=2.10.1
, I got the following error ‘ImportError: cannot import name ‘Markup’ from ‘jinja2”. Here is a snippet of my error
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
return self.load_wsgiapp()
File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 359, in import_app
mod = importlib.import_module(module)
File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/app/search_service/__init__.py", line 12, in <module>
from flasgger import Swagger
File "/usr/local/lib/python3.7/site-packages/flasgger/__init__.py", line 10, in <module>
from .base import Swagger, Flasgger, NO_SANITIZER, BR_SANITIZER, MK_SANITIZER, LazyJSONEncoder # noqa
File "/usr/local/lib/python3.7/site-packages/flasgger/base.py", line 19, in <module>
from flask import Blueprint
File "/usr/local/lib/python3.7/site-packages/flask/__init__.py", line 19, in <module>
from jinja2 import Markup, escape
ImportError: cannot import name 'Markup' from 'jinja2' (/usr/local/lib/python3.7/site-packages/jinja2/__init__.py)
Here are the steps I used to solve the error ‘ImportError: cannot import name ‘Markup’ from ‘jinja2”.
Why ImportError cannot import name ‘Markup’ from ‘jinja2’ error is seen?
The error, ImportError: cannot import name ‘Markup’ from ‘jinja2’ is seen because error comes from flask File "/usr/local/lib/python3.7/site-packages/flask/__init__.py
For a simple fix, remove the older version of Flask==1.0.2
and install the newer version of Flask==2.0.3
, and this will solve the problem.
A detailed solution to fix the ImportError cannot import name ‘Markup’ from ‘jinja2’ error provided below:
How to fix the ImportError cannot import name ‘Markup’ from ‘jinja2’ error ?
The error ImportError: cannot import name ‘Markup’ from ‘jinja2’ can be solved in two ways.
Method 1: Remove Flask==1.0.2
and install Flask==2.0.3
Create a new Flask application using Flask==1.0.2
and found that the error comes from this version of Flask when it used with Jinja2>=2.10.1
.
But when you remove the older version Flask==1.0.2
and then install the newer version of Flask==2.0.3
, everything works fine.
pip uninstall Flask Jinja2
pip install Flask Jinja2
Dependencies:
pip freeze
click==8.0.4
Flask==2.0.3
itsdangerous==2.1.2
Jinja2==3.1.1
MarkupSafe==2.1.1
Werkzeug==2.0.3
Method 2: Import Markup
The error says that it cannot import Markup, so try importing Markup using the following code :
>>> from jinja2.utils import markupsafe
>>> markupsafe.Markup()
Markup('')
Conclusion
To fix the error ImportError cannot import name ‘Markup’ from ‘jinja2’ ; try removing Flask==1.0.2
and install Flask==2.0.3
, everything works fine. If this does not work try importing Markup directly from jinja2.utils.