ImportError:无法从“jinja2”导入名称“Markup”

you*_*ds1 55 python jinja2 flask

Flask==1.0.2当我最近部署包含和的项目时Jinja2>=2.10.1,出现以下错误。我前一天部署的时候运行得很好。我尝试更新,Jinja2但这并没有解决问题。

  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)
Run Code Online (Sandbox Code Playgroud)

requirements.txt

attrs>=19.1.0
boto3==1.17.23
click==7.0
itsdangerous==2.0.1
flasgger==0.9.5
Flask==1.0.2
Flask-RESTful>=0.3.6
flask-cors==3.0.8
gunicorn==20.1.0
Jinja2>=2.10.1
jsonschema>=3.0.1,<4.0
marshmallow>=3.0,<=3.6
marshmallow3-annotations>=1.0.0
pytz==2021.1
requests>=2.25.0
requests-aws4auth==1.1.0
statsd==3.2.1
typing==3.6.4
werkzeug>=2.0.0
wheel==0.36.2
itsdangerous==2.0.1
Run Code Online (Sandbox Code Playgroud)

ged*_*lod 41

由于导入错误来自烧瓶File "/usr/local/lib/python3.7/site-packages/flask/__init__.py

我尝试使用创建一个新的 Flask 应用程序Flask==1.0.2,发现错误来自于这个版本的 Flask 在与Jinja2>=2.10.1.

但是当您删除Flask==1.0.2并安装时Flask==2.0.3,一切正常。

pip uninstall  Flask Jinja2
Run Code Online (Sandbox Code Playgroud)
pip install Flask Jinja2
Run Code Online (Sandbox Code Playgroud)

依赖关系

pip freeze
Run Code Online (Sandbox Code Playgroud)
click==8.0.4
Flask==2.0.3
itsdangerous==2.1.2
Jinja2==3.1.1
MarkupSafe==2.1.1
Werkzeug==2.0.3
Run Code Online (Sandbox Code Playgroud)


ged*_*lod 23

版本3.0.1

关于文档

修复了不带参数调用已弃用的 jinja2.Markup 的问题。请改用 markupsafe.Markup。第1438章

因此,要导入标记,请使用以下代码:

>>> from markupsafe import Markup 
>>> Markup()
Markup('')
Run Code Online (Sandbox Code Playgroud)

  • 该版本可以通过 `pip install jinja2==3.0.1` 安装 (10认同)

小智 9

pip install --upgrade <package-name>我通过在我的 Flask 应用程序的所有单独包上运行解决了类似的问题。这意味着我做到了;

  1. pip install --upgrade babel
  2. pip install --upgrade python-dateutil
  3. pip install --upgrade flask-moment
  4. pip install --upgrade flask-wtf
  5. pip install --upgrade flask_sqlalchemy

要求.txt


小智 7

我想这可行:

from markupsafe import Markup
Run Code Online (Sandbox Code Playgroud)

在Github上看到的

  • 您争论的答案可以补充更多信息,请通过编辑添加更多信息,并阅读[帮助中心]中的[如何写出一个好的答案](https://stackoverflow.com/help/how-to-answer) ](https://stackoverflow.com/help) (3认同)

ged*_*lod 3

jinja 的实际稳定版本是 3.x尝试更新 jinja:

  1. 卸载Jinja2==2.10.1
pip uninstall jinja2
Run Code Online (Sandbox Code Playgroud)
  1. 安装最新版本的jinja2
pip install --upgrade jinja2
Run Code Online (Sandbox Code Playgroud)

  • Jinja2 的实际版本是 (3.1.1) 稳定版本,2022 年 3 月 25 日发布 (2认同)
  • 我没有导入它,Flask 正在运行时导入它。`文件“/usr/local/lib/python3.7/site-packages/flask/__init__.py”,第 19 行,在 &lt;module&gt; from jinja2 import 标记中,转义` (2认同)