[Fix] ImportError cannot import name ‘Markup’ from ‘jinja2’

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.