Werkzeug: La version 1.0.0 a supprimé le code précédemment obsolète

Créé le 6 févr. 2020  ·  22Commentaires  ·  Source: pallets/werkzeug

La version 1.0.0 qui a été poussée il y a 2 heures a publié des changements de rupture pour les personnes utilisant flask. Je ne sais pas s'il s'agissait d'un effet souhaité et le flacon doit épingler leur version ou si des modifications doivent être apportées à ce projet.

Commentaire le plus utile

C'est une expérience utilisateur complètement horrible. Flask-WTF 0.14.3 avec les correctifs a été publié il y a quelques heures . Comment poussons-nous une version qui supprime le support alors que des parties massives de l'écosystème n'étaient pas prêtes pour cela ?

C'est, je crois, la troisième fois qu'une mise à jour de l'une des bibliothèques de palettes a cassé le code que j'avais exécuté en moins de six mois.

Tous les 22 commentaires

Veuillez publier des retraçages complets si vous rencontrez des problèmes.

Le problème ne concerne pas Flask et Werkzeug ne continuera pas à prendre en charge ces importations obsolètes. 0.16 a émis des avertissements de dépréciation pendant 5 mois. Utilisez cette version comme étape intermédiaire pour identifier les importations qui ont changé.

Vous pouvez aider les extensions et autres projets en ouvrant un problème ou en soumettant un PR dans le projet concerné.

  • Flask-Admin 1.5.5
  • Flacon Babel 1.0
  • Flacon BabelEx 0.9.4
  • flask-restplus (non fusionné, non maintenu en faveur de flask-restx)
  • flask-restx (fusionné, pas encore publié)
  • Flacon-Test 0.8.0
  • Flacon-WTF 0.14.3
  • Django-extensions 2.2.8
  • pytest-flacon 0.15.1
Traceback (most recent call last):
  File "/usr/local/bin/pytest", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 73, in main
    config = _prepareconfig(args, plugins)
  File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 224, in _prepareconfig
    pluginmanager=pluginmanager, args=args
  File "/usr/local/lib/python3.7/site-packages/pluggy/hooks.py", line 286, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 93, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 87, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 203, in _multicall
    gen.send(outcome)
  File "/usr/local/lib/python3.7/site-packages/_pytest/helpconfig.py", line 89, in pytest_cmdline_parse
    config = outcome.get_result()
  File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 794, in pytest_cmdline_parse
    self.parse(args)
  File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 1000, in parse
    self._preparse(args, addopts=addopts)
  File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 948, in _preparse
    self.pluginmanager.load_setuptools_entrypoints("pytest11")
  File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 299, in load_setuptools_entrypoints
    plugin = ep.load()
  File "/usr/local/lib/python3.7/site-packages/importlib_metadata/__init__.py", line 94, in load
    module = import_module(match.group('module'))
  File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "/usr/local/lib/python3.7/site-packages/_pytest/assertion/rewrite.py", line 143, in exec_module
    exec(co, module.__dict__)
  File "/usr/local/lib/python3.7/site-packages/pytest_flask/plugin.py", line 14, in <module>
    from werkzeug import cached_property
ImportError: cannot import name 'cached_property' from 'werkzeug' (/usr/local/lib/python3.7/site-packages/werkzeug/__init__.py)

C'est pytest-flask, vous aurez envie de les contacter. On dirait que pytest-flask 0.15.1 a déjà été publié avec un correctif.

+1, ayant le problème suivant :
packages/flask_wtf/recaptcha/widgets.py", line 5, in <module> from werkzeug import url_encode ImportError: cannot import name 'url_encode'

+1, cette nouvelle version brise également nos dépendances. On dirait que c'est un problème V1.0.0

```Traceback (appel le plus récent en dernier) :
Fichier "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask/cli.py", ligne 240, dans locate_app
__import__(nom_module)
Fichier "/home/ec2-user/butter_web/butter.py", ligne 1, dans
à partir de l'application d'importation d'applications, db
Fichier "/home/ec2-user/butter_web/app/__init__.py", ligne 8, dans
depuis flask_admin.contrib.sqla importer ModelView
Fichier "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", ligne 2, dans
à partir de .view importer ModelView
Fichier "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/view.py", ligne 19, dans
depuis flask_admin.model importer BaseModelView
Fichier "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/__init__.py", ligne 2, dans
à partir de .base importer BaseModelView
Fichier "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/base.py", ligne 8, dans
de werkzeug importer secure_filename
ImportError : impossible d'importer le nom 'secure_filename'

Quelle est la solution ici ? Le verrouillage explicite de 0.16.1 ne résout pas ce problème.

@ tjohnson4 Voir mon commentaire ci-dessus pour savoir quoi faire. L'erreur que vous avez publiée sur le problème de Flask n'était pas liée.

C'est une expérience utilisateur complètement horrible. Flask-WTF 0.14.3 avec les correctifs a été publié il y a quelques heures . Comment poussons-nous une version qui supprime le support alors que des parties massives de l'écosystème n'étaient pas prêtes pour cela ?

C'est, je crois, la troisième fois qu'une mise à jour de l'une des bibliothèques de palettes a cassé le code que j'avais exécuté en moins de six mois.

problème similaire

Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/ubuntu/swagger-codegen/samples/server/petstore/flaskConnexion/swagger_server/__main__.py", line 3, in <module>
    import connexion
  File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/__init__.py", line 3, in <module>
    from .apis import AbstractAPI  # NOQA
  File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/apis/__init__.py", line 1, in <module>
    from .abstract import AbstractAPI  # NOQA
  File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/apis/abstract.py", line 14, in <module>
    from ..operation import Operation
  File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/operation.py", line 7, in <module>
    from .decorators import validation
  File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/decorators/validation.py", line 9, in <module>
    from werkzeug import FileStorage
ImportError: cannot import name 'FileStorage'

solution de contournement
ajouter werkzeug == 0.16.1 à requirements.txt l'a résolu pour moi

La connexion @Abdelsalam-Abbas a corrigé cette importation en octobre 2019 - vous utilisez peut-être une ancienne version ?
https://github.com/zalando/connexion/releases/tag/2.4.0

Si votre Flask-Session est cassé :

File "/usr/local/lib/python3.8/site-packages/flask_session/__init__.py", line 61, in init_app                                                                                                                                                                                                                               
    app.session_interface = self._get_interface(app)                                                                                                                                                                                                                                                                          
  File "/usr/local/lib/python3.8/site-packages/flask_session/__init__.py", line 90, in _get_interface                                                                                                                                                                                                                         
    session_interface = FileSystemSessionInterface(                                                                                                                                                                                                                                                                           
  File "/usr/local/lib/python3.8/site-packages/flask_session/sessions.py", line 313, in __init__                                                                                                                                                                                                                              
    from werkzeug.contrib.cache import FileSystemCache                                                                                                                                                                                                                                                                        
ModuleNotFoundError: No module named 'werkzeug.contrib'  

Ajouter werkzeug == 0.16.1 à requirements.txt l'a résolu pour moi

Si votre Flask-RestPlus est cassé :

Traceback (most recent call last):
  File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  File "/export/home/hysdsops/sciflo/ops/pele/app.py", line 4, in <module>
    from pele import create_app, db
  File "/export/home/hysdsops/sciflo/ops/pele/pele/__init__.py", line 5, in <module>
    from flask_restplus import apidoc
  File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask_restplus/__init__.py", line 4, in <module>
    from . import fields, reqparse, apidoc, inputs, cors
  File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask_restplus/fields.py", line 17, in <module>
    from werkzeug import cached_property
ImportError: cannot import name 'cached_property' from 'werkzeug' (/export/home/hysdsops/sciflo/lib/python3.7/site-packages/werkzeug/__init__.py)

Ajouter werkzeug == 0.16.1 à requirements.txt a résolu le problème pour moi.

Quelqu'un voudrait-il expliquer pourquoi mon objet de demande de flacon renvoyé par werkzeug de LocalProxy provient d'une version différente de celle que j'ai localement ?

Depuis cette version, j'obtiens cette erreur :
File "/Users/lucas/Software/anaconda3/envs/pytest/lib/python3.6/site-packages/flask/json.py", line 251, in jsonify if current_app.config['JSONIFY_PRETTYPRINT_REGULAR'] and not request.is_xhr: File "/Users/lucas/Software/anaconda3/envs/pytest/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__ return getattr(self._get_current_object(), name) AttributeError: 'Request' object has no attribute 'is_xhr'

is_xhr est une propriété qui a été supprimée dans Flask 1.0 , mais localement j'ai 0.12.2 installé. Juste pour être clair, je poste ce problème ici parce que le bogue n'est pas dans Flask, plutôt je suis juste confus quant à pourquoi/comment LocalProxy renvoie une version plus récente de cette application Flask alors je suis attendant.

@LucasLLC is_xhr n'a jamais fait directement partie de Flask (existe-t-il une référence indiquant qu'il a été supprimé dans Flask 1.0 ? Je ne peux pas le voir dans le journal des modifications) mais cela a toujours été une API Werkzeug que Flask expose. En termes de Werkzeug, vous pouvez voir qu'il est supprimé dans 81e10efbf3a83daf09c55cd7cc13ac6c6464d405.

Si vous ne l'êtes pas déjà, je vous recommande d'épingler vos dépendances et de les mettre à jour périodiquement, une corvée facilitée par des outils tels que la poésie .

@pgjones idéalement, nous réalisons une version de correction de bogue du flacon 0.12 qui épingle werkzeug à < 1.0.0. C'est après tout une mauvaise épingle dans Flask.

De plus, oui, cette API est effectivement une API Flask et elle a été documentée en tant que telle : https://flask.palletsprojects.com/en/0.12.x/api/#flask.Request.is_xhr

@LucasLLC is_xhr n'a jamais fait directement partie de Flask (existe-t-il une référence indiquant qu'il a été supprimé dans Flask 1.0 ? Je ne peux pas le voir dans le journal des modifications) mais cela a toujours été une API Werkzeug que Flask expose. En termes de Werkzeug, vous pouvez voir qu'il est supprimé dans 81e10ef .

Ah, mon erreur. Je faisais référence à l'avertissement généré dans cette méthode et je ne savais pas qu'il venait de Werkzeug, cela a beaucoup plus de sens.

Si vous ne l'êtes pas déjà, je vous recommande d'épingler vos dépendances et de les mettre à jour périodiquement, une corvée facilitée par des outils tels que la poésie .

Merci pour le conseil! Nous étudierons la poésie.

Problème lors de l'installation d'odoo12 :

    import werkzeug.contrib.fixers
ImportError: No module named 'werkzeug.contrib'

Cependant, résolu avec

Werkzeug==0.16.1

la même erreur s'est produite

ModuleNotFoundError : aucun module nommé 'werkzeug.contrib'

J'ai le même problème avec la fiole

Le paramètre Werkzeug==0.16.1 résolu le problème.

```
depuis flask_admin.contrib.sqla importer ModelView
Fichier "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", ligne 2, dans

à partir de .view importer ModelView
Fichier "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/view.py", ligne 18, dans

depuis flask_admin.model importer BaseModelView
Fichier "/usr/local/lib/python3.6/site-packages/flask_admin/model/__init__.py", ligne 2, dans

à partir de .base importer BaseModelView
Fichier "/usr/local/lib/python3.6/site-packages/flask_admin/model/base.py", ligne 8, dans

de werkzeug importer secure_filename
ImportError : impossible d'importer le nom 'secure_filename'

Cette page vous a été utile?
0 / 5 - 0 notes