[PYTHON] Migré de Flask-RESTPlus vers Flask-RESTX

Conclusion

--Flask-RESTPlus semble arrêter la maintenance, et si vous continuez à l'utiliser, sa fourche, Flask-RESTX, a l'air bien.

Déclencheur

Je développais un petit serveur d'API Web dans Flask et documentais les spécifications de l'API à l'aide de Flask-RESTPlus. Le développement du côté Flask a été calme et je n'y ai pas touché depuis un mois environ, mais une erreur s'est produite lorsque j'ai essayé de vérifier l'opération avec une légère modification.

Quand je vérifie le journal, il y a de la mousse dans le paquet werkzeug. Le niveau n'est pas proche du point de correction.

../../../../.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'

Certes, au cours du dernier mois environ, j'avais supprimé le virtualenv à portée de main pour diverses raisons, et je l'ai recréé au moment de cette correction. J'ai réinséré le package dans le fichier requirements.txt de pip, mais quelque chose peut se produire en raison des dépendances de version.

Enquête

Cause

Si vous google, le problème de Github est un succès. Ça ressemble à ça. flask-restplus is broken by Werkzeug 1.0.0 #777

Cached_property est passé de sous werkzeug à sous werkzeug.utils lorsque Werkzeug est devenu la version 1.0.0 début février 2020. Il semble que l'erreur ci-dessus se soit produite parce que flask_restplus avait un endroit où cached_property a été importé et utilisé. Les dépendances de paquet de Flask sont écrites comme Werkzeug> = 0.15, donc l'installation des modules pip à partir de zéro sera affectée par les mises à jour majeures de Werkzeug.

Connaître Flask-RESTX

En regardant à nouveau README.md de la page Flask-RESTPlus Github, la description suivante est au début. Il a été ajouté au début de janvier 2020.

IMPORTANT NOTICE:

This project has been forked to Flask-RESTX <https://github.com/python-restx/flask-restx>_ and will be maintained by by the python-restx <https://github.com/python-restx>_ organization. Flask-RESTPlus should be considered unmaintained.

Flask-RESTPlus ne sera plus maintenu, le fork Flask-RESTX sera maintenu à l'avenir. Et cela.

Utilisation de Flask-RESTX

Essayez d'utiliser

Ce serait bien d'abaisser manuellement la version de Werkzeug, mais je pensais que le développement continuerait pendant un certain temps, alors j'ai décidé d'essayer Flask-RESTX. En regardant la page Flask-RESTX, l'utilisation semble être presque la même que Flask-RESTPlus. J'ai donc essayé de le déplacer par simple remplacement pour le moment. Le code ressemble à ceci.

flask_restplus


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

flask_restx


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

Avec cela seul, il a fonctionné sans générer d'erreur pour le moment. Flask-RESTX utilise la dernière version de PyPI, 0.1.1. Cela a une limitation de werkzeug (<= 0.16.1), il semble donc que le problème sera résolu en réinstallant le paquet pip.

Après avoir vérifié le dernier code sur Github, il semble que Werkzeug 1.0.0 est d'accord avec la méthode d'écriture d'importation modifiée. Nous espérons que PyPI reflétera cette version à l'avenir.

Une confirmation un peu plus détaillée

J'ai changé le paramètre de config sur la valeur par défaut ou un peu, mais cela ne reflétait pas non plus le paramètre sauf si j'ai changé le nom de la clé de dict. Cela change aussi simplement RESTPLUS_ en RESTX_, il est donc utile d'être mécanique.

flask_restplus


app.config['RESTPLUS_MASK_SWAGGER'] = False
app.config['RESTPLUS_JSON'] = {'ensure_ascii': False}

flask_restx


app.config['RESTX_MASK_SWAGGER'] = False
app.config['RESTX_JSON'] = {'ensure_ascii': False}

Recommended Posts

Migré de Flask-RESTPlus vers Flask-RESTX
Somme de 1 à 10
Changements de Python 2 à Python 3.0
De l'édition à l'exécution
Flirter de PHP à Python
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Mettre à jour python-social-auth de 0.1.x à 0.2.x
Migrer de requirements.txt vers pipenv
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Appelez Matlab depuis Python pour optimiser
De l'installation d'Elasticsearch à la saisie des données
Résumé de vtkXMLUnstructuredGridReader (mis à jour de temps en temps)
Résumé de vtkOpenFOAMReader (mis à jour de temps en temps)
Comment utiliser SWIG de WAF
Impossible de migrer de direct_to_template vers TemplateView
Livre de mots de l'ingénieur (mis à jour de temps en temps)
Conversion de pdf en txt 1 [pdfminer]
Programmation tirée des livres le 10 mai
Publication de Python sur la chronologie Facebook
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Sortie du Raspberry Pi vers la ligne
[Introduction] De l'installation de kibana au démarrage
Conversion de pdf en txt 2 [pyocr]
Connectez-vous à la base de données utf8mb4 à partir de python
Installation d'OpenMPI Du téléchargement au passage
Mémo Tensorflow [mis à jour de temps à autre]
Python (de la première fois à l'exécution)
Publier une image de Python sur Tumblr
Envoyer des commandes d'Atom à Maya
Comment lancer Explorer à partir de WSL
Programmation tirée des livres le 7 mai
De Ubuntu 20.04 introduction à la construction d'environnement
Connexion SSH de Windows à GCP
Comment accéder à wikipedia depuis python
Python pour passer d'une autre langue
Comment convertir .mgz en .nii.gz
Migrer de VS Code vers PyCharm
pynq-z1 De l'achat au contrôle de fonctionnement
N'a pas changé de Python 2 à 3
Mettre à jour Mac Python de 2 à 3