![](/img/trans.png)
[英]ImportError: cannot import name 'FileStorage' from 'werkzeug'
[英]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/460對flask-restx
開放, https://github.com/maxcountryman/flask-login/issues/686對flask-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.