簡體   English   中英

ImportError:無法從“werkzeug.routing”導入名稱“parse_rule”

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

在另一個系統上運行我的 Flask 項目后,我收到以下消息。 該應用程序一直運行沒有問題:

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)

我的要求.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

解決方案(解決方法)是我在 requirements.txt 的 2.1.2 版本中另外包含了 werkzeug

werkzeug==2.1.2

更多信息請訪問https://issuemode.com/issues/apache/airflow/111093941#answer-108883148

之后,我可以啟動 Flask 應用程序。

這是由於parse_rule()在最新版本的werkzeug上被標記為:internal:引起的,這會影響flask-restx (以及許多其他版本,例如flask-login )。

https://github.com/python-restx/flask-restx/issues/460flask-restx開放, https://github.com/maxcountryman/flask-login/issues/686flask-login開放。

正如您所提到的,固定到舊版本是目前的解決方法(即werkzeug==2.1.2 )。

從 github 問題復制到此處,供找到此問題的人使用。 如果您使用 Flask 並嘗試降級到 Werkzeug 2.1.2,您將收到錯誤,因為 flask 想要 Werkzeug 的 2.2.x。 您將需要降級 flask 以及如下:

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

此問題來自最新版本的 flask。 根據大多數建議 Flask 已降級到v2.1.2 最新版本的 Flask 需要 Werkzeug >= 2.2.0但 Flask v2.1.2需要 Werkzeug >= 2.0 因此 Werkzeug 被降級到v2.1.2 我執行了以下命令,因為我使用pipenv進行依賴管理。

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

如果有人使用pip3只需執行以下操作:

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

降級后我的 Pipfile 如下所示:

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

希望它能解決你的問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM