从Flask-RESTPlus迁移到Flask-RESTX


结论

  • Flask-RESTPlus似乎停止了维护,并且如果您继续使用它,它的前叉Flask-RESTX看起来不错
  • 对于现有代码,只需将flask_restplus替换为flask_restx即可。
  • 还必须更改参数名称以反映配置设置

触发

我正在Flask中开发一个小型Web API服务器,并使用Flask-RESTPlus在Swagger中记录了API规范。 Flask方面的开发一直很平静,过去一个月左右我都没有碰过它,但是当我尝试对操作进行稍加修改后就出现了错误。

当我检查日志时,它在werkzeug包中是青苔。液位不在校正点附近。

1
2
3
../../../../.pyenv/versions/3.6.9/envs/testenv/lib/python3.6/site-packages/flask_restplus/fields.py:17: in <module>
    from werkzeug import cached_property
E   ImportError: cannot import name 'cached_property'

的确,在过去一个月左右的时间里,由于种种原因,我已经删除了virtualenv,并在此更正时重新创建了它。我正在pip的requirements.txt中重新安装该软件包,但是由于版本依赖性,可能会发生某些情况。

研究

原因

如果您用Google搜索,那么Github上的问题将大受欢迎。看起来像这样。
flask-restplus被Werkzeug 1.0.0破坏了#777

在2020年2月上旬Werkzeug升级到1.0.0版本时,

cached_propertywerkzeug下移到了werkzeug.utils下。似乎发生上述错误是因为flask_restplus具有导入和使用cached_property的部分。
Flask的软件包依赖项写为Werkzeug>=0.15,因此从头开始安装pip模块将受到Werkzeug的主要版本升级的影响。

知道Flask-RESTX

如果再次查看Flask-RESTPlus的Github页面上的README.md,您将在开头看到以下说明。它是在2020年1月初左右添加的。

重要通知:

此项目已分叉到Flask-RESTX <https://github.com/python-restx/flask-restx> _,将由python-restx <https://github.com/python-restx> _组织维护。Flask-RESTPlus应该被视为未维护。

Flask-RESTPlus将不再被维护,叉Flask-RESTX将在将来被维护。然后。

使用Flask-RESTX

尝试使用

应该手动降低Werkzeug的版本,但是我认为开发不会持续一段时间,因此我决定尝试Flask-RESTX。就Flask-RESTX页面而言,用法与Flask-RESTPlus几乎相同,并且看起来不错。因此,我暂时尝试通过简单更换来移动它。代码看起来像这样。

flask_restplus

1
2
from flask_restplus import Namespace, fields, Resource
from flask_restplus.namespace import HTTPStatus

flask_restx

1
2
from flask_restx import Namespace, fields, Resource
from flask_restx.namespace import HTTPStatus

仅此一项,它暂时没有任何错误输出。
Flask-RESTX使用最新版本的PyPI 0.1.1。这是werkzeug(