导入错误:由于flask_jwt_extended,无法从“werkzeug.security”导入名称“safe_str_cmp”?

问题描述 投票:0回答:1

我正在尝试制作一个烧瓶应用程序,但由于在这篇文章中描述的同样的事情,我很难让它运行:无论我做什么,我都会收到

ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security'
错误。我已经尝试了这里描述的所有内容以及更多内容:降级的werkzeug和flask,升级和降级的flask_jwt_extended...我仍然有同样的错误,不知道为什么,并且无法思考任何事情。

这是回溯:

Traceback (most recent call last):
  File "/home/rozenn/.local/bin/flask", line 8, in <module>
    sys.exit(main())
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask/cli.py", line 985, in main
    cli.main()
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask/cli.py", line 579, in main
    return super().main(*args, **kwargs)
  File "/home/rozenn/.local/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/rozenn/.local/lib/python3.8/site-packages/click/core.py", line 1651, in invoke
    cmd_name, cmd, args = self.resolve_command(ctx, args)
  File "/home/rozenn/.local/lib/python3.8/site-packages/click/core.py", line 1698, in resolve_command
    cmd = self.get_command(ctx, cmd_name)
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask/cli.py", line 522, in get_command
    self._load_plugin_commands()
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask/cli.py", line 517, in _load_plugin_commands
    self.add_command(ep.load(), ep.name)
  File "/home/rozenn/.local/lib/python3.8/site-packages/importlib_metadata/__init__.py", line 203, in load
    module = import_module(match.group('module'))
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 848, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask_appbuilder/__init__.py", line 5, in <module>
    from .api import ModelRestApi  # noqa: F401
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask_appbuilder/api/__init__.py", line 62, in <module>
    from ..security.decorators import permission_name, protect
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask_appbuilder/security/decorators.py", line 21, in <module>
    from flask_jwt_extended import verify_jwt_in_request
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask_jwt_extended/__init__.py", line 1, in <module>
    from .jwt_manager import JWTManager
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask_jwt_extended/jwt_manager.py", line 28, in <module>
    from flask_jwt_extended.tokens import (
  File "/home/rozenn/.local/lib/python3.8/site-packages/flask_jwt_extended/tokens.py", line 6, in <module>
    from werkzeug.security import safe_str_cmp
ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security' (/home/rozenn/.local/lib/python3.8/site-packages/werkzeug/security.py)

这是我最终得到的requirements.txt(最终

pip freeze
):

click @ file:///home/conda/feedstock_root/build_artifacts/click_1666798198223/work
Flask==2.0.0 
Flask-JWT-Extended==4.4.4
Flask-Login==0.6.2
importlib-metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1681831559787/work
itsdangerous @ file:///home/conda/feedstock_root/build_artifacts/itsdangerous_1648147185463/work
Jinja2==3.0.3
MarkupSafe @ file:///home/conda/feedstock_root/build_artifacts/markupsafe_1674135794919/work
PyJWT==2.6.0
Werkzeug==2.0.3
zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1677313463193/work

我真的不知道该怎么办,我只是想获得一个简单的 API 来运行...... 谢谢您的宝贵时间。

python flask anaconda werkzeug
1个回答
0
投票

safe_str_cmp 方法已被弃用。您可以将其替换为 hmac.compare_digest()。只需通过 pip 安装 hmac,导入方法并替换 safe_str_cmp 即可。

https://docs.python.org/3/library/hmac.html#hmac.compare_digest

© www.soinside.com 2019 - 2024. All rights reserved.