Werkzeug: Version 1.0.0 entfernte zuvor veralteten Code

Erstellt am 6. Feb. 2020  ·  22Kommentare  ·  Quelle: pallets/werkzeug

Die Version 1.0.0, die vor 2 Stunden veröffentlicht wurde, veröffentlichte grundlegende Änderungen für Leute, die Flask verwenden. Ich bin mir nicht sicher, ob dies ein gewünschter Effekt war und Kolben ihre Version anheften sollten oder ob Änderungen in diesem Projekt vorgenommen werden müssen.

Hilfreichster Kommentar

Dies ist eine völlig schreckliche Benutzererfahrung. Flask-WTF 0.14.3 mit den Fixes wurde vor Stunden veröffentlicht. Wie bringen wir eine Version heraus, die die Unterstützung entfernt, wenn riesige Teile des Ökosystems dafür nicht bereit waren?

Dies ist, glaube ich, das dritte Mal, dass ein Update einer der Palettenbibliotheken den Code brach, den ich in weniger als sechs Monaten ausgeführt hatte.

Alle 22 Kommentare

Bitte posten Sie vollständige Rückverfolgungen, wenn Sie auf Probleme stoßen.

Das Problem liegt nicht bei Flask, und Werkzeug wird diese veralteten Importe nicht weiter unterstützen. 0.16 gibt seit 5 Monaten Warnungen zur Einstellung aus. Verwenden Sie diese Version als Zwischenschritt, um zu ermitteln, welche Importe geändert wurden.

Sie können Erweiterungen und anderen Projekten helfen, indem Sie eine Ausgabe eröffnen oder eine PR im entsprechenden Projekt einreichen.

  • Flask-Admin 1.5.5
  • Kolben-Babel 1.0
  • Kolben-BabelEx 0.9.4
  • Flask-restplus (nicht zusammengeführt, ungepflegt zugunsten Flask-restx)
  • flakon-restx (zusammengeführt, noch nicht freigegeben)
  • Kolbentest 0.8.0
  • Kolben-WTF 0.14.3
  • django-Erweiterungen 2.2.8
  • pytest-Kolben 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)

Das ist pytest-flask, Sie sollten sie kontaktieren. Sieht so aus, als wäre pytest-flask 0.15.1 schon mit einem Fix veröffentlicht worden.

+1 mit folgendem Problem:
packages/flask_wtf/recaptcha/widgets.py", line 5, in <module> from werkzeug import url_encode ImportError: cannot import name 'url_encode'

+1 Diese neueste Version durchbricht auch unsere Abhängigkeiten. Scheint ein Problem mit V1.0.0 zu sein

```Traceback (letzter Aufruf zuletzt):
Datei "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask/cli.py", Zeile 240, in locate_app
__import__(Modulname)
Datei "/home/ec2-user/butter_web/butter.py", Zeile 1, in
aus App-Import-App, db
Datei "/home/ec2-user/butter_web/app/__init__.py", Zeile 8, in
aus Kolben_admin.contrib.sqla importieren ModelView
Datei "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", Zeile 2, in
aus .view importieren ModelView
Datei "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/view.py", Zeile 19, in
aus Kolben_admin.model importieren BaseModelView
Datei "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/__init__.py", Zeile 2, in
aus .base importieren BaseModelView
Datei "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/base.py", Zeile 8, in
from werkzeug import secure_filename
ImportError: Name 'secure_filename' kann nicht importiert werden

Was ist hier die Lösung? Das explizite Sperren von 0.16.1 behebt dies nicht.

@tjohnson4 Siehe meinen Kommentar oben, um zu

Dies ist eine völlig schreckliche Benutzererfahrung. Flask-WTF 0.14.3 mit den Fixes wurde vor Stunden veröffentlicht. Wie bringen wir eine Version heraus, die die Unterstützung entfernt, wenn riesige Teile des Ökosystems dafür nicht bereit waren?

Dies ist, glaube ich, das dritte Mal, dass ein Update einer der Palettenbibliotheken den Code brach, den ich in weniger als sechs Monaten ausgeführt hatte.

ähnliches Problem

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'

Problemumgehung
werkzeug == 0.16.1 zu Requirements.txt hinzufügen hat es für mich gelöst

@Abdelsalam-Abbas-Verbindung hat diesen Import im Oktober 2019 behoben - vielleicht verwenden Sie eine alte Version?
https://github.com/zalando/connexion/releases/tag/2.4.0

Wenn Ihre Flask-Session kaputt ist:

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'  

werkzeug == 0.16.1 zu Requirements.txt hinzugefügt hat es für mich gelöst

Wenn Ihr Flask-RestPlus kaputt ist:

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)

werkzeug == 0.16.1 zu Requirements.txt hinzugefügt hat es für mich gelöst.

Würde es jemandem etwas ausmachen, einen Einblick zu geben, warum mein Kolbenanforderungsobjekt, das von werkzeug LocalProxy aus einer anderen Version stammt als die, die ich lokal habe?

Seit dieser Version erhalte ich diesen Fehler:
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 ist eine Eigenschaft, die in Flask 1.0 , aber lokal habe ich 0.12.2 installiert. Nur um das klarzustellen, ich poste dieses Problem hier, weil der Fehler nicht in Flask ist, sondern ich bin nur verwirrt, warum / wie LocalProxy eine neuere Version dieser Flask-App zurückgibt, dann bin ich erwarten.

@LucasLLC is_xhr war nie direkt Teil von Flask (gibt es eine Referenz, die besagt, dass es in Flask 1.0 entfernt wurde? Ich kann es nicht im Changelog sehen), sondern es war immer eine Werkzeug-API, die Flask verfügbar macht. In Bezug auf das Werkzeug können Sie sehen, dass es in 81e10efbf3a83daf09c55cd7cc13ac6c6464d405 entfernt wurde.

Wenn Sie es noch nicht sind, würde ich empfehlen, Ihre Abhängigkeiten zu fixieren und regelmäßig zu aktualisieren, eine Aufgabe, die durch Tools wie Poesie leicht gemacht wird.

@pgjones idealerweise führen wir eine Bugfix-Version von Flask 0.12 durch, die werkzeug auf < 1.0.0 festlegt. Dies ist schließlich ein schlechter Pin in Flask.

Auch ja, diese API ist effektiv eine Flask-API und wurde als solche dokumentiert: https://flask.palletsprojects.com/en/0.12.x/api/#flask.Request.is_xhr

@LucasLLC is_xhr war nie direkt Teil von Flask (gibt es eine Referenz, die besagt, dass es in Flask 1.0 entfernt wurde? Ich kann es nicht im Changelog sehen), sondern es war immer eine Werkzeug-API, die Flask verfügbar macht. In Bezug auf Werkzeug können Sie sehen, dass es in 81e10ef entfernt wurde.

Ach, mein Fehler. Ich habe auf die Warnung verwiesen, die in dieser Methode generiert wurde, und wusste nicht, dass sie von Werkzeug stammt, das macht viel mehr Sinn.

Wenn Sie es noch nicht sind, würde ich empfehlen, Ihre Abhängigkeiten zu fixieren und regelmäßig zu aktualisieren, eine Aufgabe, die durch Tools wie Poesie leicht gemacht wird.

Danke für den Tipp! Wir werden uns mit Poesie befassen.

Hatte ein Problem bei der Installation von odoo12:

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

Habe es jedoch gelöst mit

Werkzeug==0.16.1

der gleiche Fehler ist aufgetreten

ModuleNotFoundError: Kein Modul namens 'werkzeug.contrib'

Habe das gleiche Problem mit der Flasche

Das Festlegen von Werkzeug==0.16.1 das Problem behoben.

```
aus Kolben_admin.contrib.sqla importieren ModelView
Datei "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", Zeile 2, in

aus .view importieren ModelView
Datei "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/view.py", Zeile 18, in

aus Kolben_admin.model importieren BaseModelView
Datei "/usr/local/lib/python3.6/site-packages/flask_admin/model/__init__.py", Zeile 2, in

aus .base importieren BaseModelView
Datei "/usr/local/lib/python3.6/site-packages/flask_admin/model/base.py", Zeile 8, in

from werkzeug import secure_filename
ImportError: Name 'secure_filename' kann nicht importiert werden

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen