# How to fix ImportError: cannot import name 'soft_unicode' from 'markupsafe'

markupsafe 2.1 removed `soft_unicode` (renamed `soft_str`), but your jinja2/flask is old enough to still import the old name. Upgrade the stack: `pip install -U flask jinja2 markupsafe`. Quick unblock: `pip install markupsafe==2.0.1`, which still has soft_unicode.

## The exact error

```text
ImportError: cannot import name 'soft_unicode' from 'markupsafe'
```

## Fix it

1. `pip install -U flask jinja2 markupsafe`
   Expected: modern mutually-compatible versions

2. Retry the import.
   Expected: works

3. Can not upgrade the app? `pip install markupsafe==2.0.1` as a stopgap.
   Expected: old jinja2 finds soft_unicode again

## When this applies

the traceback shows an old jinja2/flask importing soft_unicode from a new markupsafe

## When this does NOT apply

your own code imports soft_unicode (just use soft_str)

## Versions

markupsafe >= 2.1 with jinja2 < 3.0 / flask < 2.0

## Why it happens

markupsafe 2.1 did the py2-cleanup rename; old jinja2 (<3.0) still asked for the old name.

## Edge cases

aws-sam-cli below 1.38.1 is another classic trigger; upgrade sam instead.
