我正在尝试制作一个烧瓶应用程序,但由于在这篇文章中描述的同样的事情,我很难让它运行:无论我做什么,我都会收到
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 来运行...... 谢谢您的宝贵时间。
safe_str_cmp 方法已被弃用。您可以将其替换为 hmac.compare_digest()。只需通过 pip 安装 hmac,导入方法并替换 safe_str_cmp 即可。
https://docs.python.org/3/library/hmac.html#hmac.compare_digest