简体   繁体   English

ImportError:无法从“werkzeug.routing”导入名称“parse_rule”

[英]ImportError: cannot import name 'parse_rule' from 'werkzeug.routing'

I got the following message after running my Flask project on another system.在另一个系统上运行我的 Flask 项目后,我收到以下消息。 The application ran all the time without problems:该应用程序一直运行没有问题:

Error: While importing 'app', an ImportError was raised:

Traceback (most recent call last):
  File "c:\users\User\appdata\local\programs\python\python39\lib\site-packages\flask\cli.py", line 214, in locate_app
    __import__(module_name)
  File "C:\Users\User\Desktop\Projekt\app\__init__.py", line 3, in <module>
    from flask_restx import Namespace, Api
  File "c:\users\User\appdata\local\programs\python\python39\lib\site-packages\flask_restx\__init__.py", line 5, in <module>
  File "c:\users\User\appdata\local\programs\python\python39\lib\site-packages\flask_restx\api.py", line 50, in <module>
    from .swagger import Swagger
  File "c:\users\User\appdata\local\programs\python\python39\lib\site-packages\flask_restx\swagger.py", line 18, in <module>
    from werkzeug.routing import parse_rule
ImportError: cannot import name 'parse_rule' from 'werkzeug.routing' (c:\users\User\appdata\local\programs\python\python39\lib\site-packages\werkzeug\routing\__i
nit__.py)

My requirements.txt我的要求.txt

Flask~=2.1.2
psycopg2-binary==2.9.3
Flask-SQLAlchemy==2.5.1
flask-restx==0.5.1
qrcode~=7.3.1
PyPDF2==2.6.0
reportlab~=3.6.10
WTForms~=3.0.1
flask-bootstrap==3.3.7.1
flask-wtf==1.0.1

The solution (workaround) was that I additionally included werkzeug in the version 2.1.2 in the requirements.txt解决方案(解决方法)是我在 requirements.txt 的 2.1.2 版本中另外包含了 werkzeug

werkzeug==2.1.2

more information at https://issuemode.com/issues/apache/airflow/111093941#answer-108883148更多信息请访问https://issuemode.com/issues/apache/airflow/111093941#answer-108883148

After that I could start the Flask application.之后,我可以启动 Flask 应用程序。

This is caused by parse_rule() being marked as :internal: on the latest release of werkzeug which impacts flask-restx (plus many others such as flask-login ).这是由于parse_rule()在最新版本的werkzeug上被标记为:internal:引起的,这会影响flask-restx (以及许多其他版本,例如flask-login )。

https://github.com/python-restx/flask-restx/issues/460 is open for flask-restx , https://github.com/maxcountryman/flask-login/issues/686 for flask-login . https://github.com/python-restx/flask-restx/issues/460flask-restx开放, https://github.com/maxcountryman/flask-login/issues/686flask-login开放。

As you've mentioned, pinning to an older version is the workaround for now (ie werkzeug==2.1.2 ).正如您所提到的,固定到旧版本是目前的解决方法(即werkzeug==2.1.2 )。

Copying here from the github issue for those who find this.从 github 问题复制到此处,供找到此问题的人使用。 If you are using with Flask and try to downgrade to Werkzeug 2.1.2 you will get an error because flask wants 2.2.x from Werkzeug.如果您使用 Flask 并尝试降级到 Werkzeug 2.1.2,您将收到错误,因为 flask 想要 Werkzeug 的 2.2.x。 You will need to downgrade flask as well as follows:您将需要降级 flask 以及如下:

Werkzeug <= 2.1.2   
flask == 2.1.2   
flask-restx >= 0.5.1  

This Issue is come from latest version of flask.此问题来自最新版本的 flask。 Based on most suggestions Flask was downgraded to v2.1.2 .根据大多数建议 Flask 已降级到v2.1.2 The latest version of Flask requires Werkzeug >= 2.2.0 but Flask v2.1.2 requires Werkzeug >= 2.0 .最新版本的 Flask 需要 Werkzeug >= 2.2.0但 Flask v2.1.2需要 Werkzeug >= 2.0 Therefore Werkzeug was downgraded to v2.1.2 .因此 Werkzeug 被降级到v2.1.2 I executed following commands because I used pipenv for dependency management.我执行了以下命令,因为我使用pipenv进行依赖管理。

pipenv install Flask==2.1.2
pipenv install Werkzeug==2.1.2

if someone using pip3 just execute following:如果有人使用pip3只需执行以下操作:

pip3 install Flask==2.1.2
pip3 install Werkzeug==2.1.2

After downgrading my Pipfile looks as follows:降级后我的 Pipfile 如下所示:

[packages]
flask = "==2.1.2"
werkzeug = "==2.1.2"

Hope it will solve you issues!希望它能解决你的问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 导入错误:无法从“werkzeug”导入名称“FileStorage” - ImportError: cannot import name 'FileStorage' from 'werkzeug' ImportError:无法从“werkzeug”导入名称“FileWrapper” - ImportError: cannot import name 'FileWrapper' from 'werkzeug' 导入错误:无法从“werkzeug”导入名称“url_encode” - ImportError: cannot import name 'url_encode' from 'werkzeug' Flask 应用程序无法启动“ImportError:无法从‘werkzeug’导入名称‘cached_property’” - Flask app wont launch 'ImportError: cannot import name 'cached_property' from 'werkzeug' ' Python Flask(部署在 Heroku 上):ImportError: cannot import name 'secure_filename' from 'werkzeug' when deploying on Z1A79417461C9ADBE82F8B93E7FAD39 - Python Flask (deployed on Heroku): ImportError: cannot import name 'secure_filename' from 'werkzeug' when deploying on Heroku ImportError:无法从“werkzeug.security”导入名称“safe_str_cmp” - ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security' 导入错误:无法从“werkzeug.serving”导入名称“run_with_reloader” - ImportError: cannot import name 'run_with_reloader' from 'werkzeug.serving' ImportError:无法从“psqlparse”导入名称“parse_dict” - ImportError: cannot import name 'parse_dict' from 'psqlparse' 无法从“werkzeug.http”导入名称“dump csp header” - Cannot import name 'dump csp header' from 'werkzeug.http' 无法从“werkzeug”导入名称“secure_filename” - cannot import name 'secure_filename' from 'werkzeug'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM