Werkzeug: La versión 1.0.0 eliminó el código previamente obsoleto

Creado en 6 feb. 2020  ·  22Comentarios  ·  Fuente: pallets/werkzeug

La versión 1.0.0 que se lanzó hace 2 horas publicó cambios importantes para las personas que usan frasco. No estoy seguro de si era un efecto deseado y el matraz debería fijar su versión o si es necesario realizar cambios en este proyecto.

Comentario más útil

Esta es una experiencia de usuario completamente terrible. Flask-WTF 0.14.3 con las correcciones se lanzó hace horas . ¿Cómo estamos lanzando un lanzamiento que elimina el soporte cuando partes masivas del ecosistema no estaban listas para esto?

Creo que esta es la tercera vez que una actualización de una de las bibliotecas de paletas rompió el código que tenía ejecutándose en menos de seis meses.

Todos 22 comentarios

Publique rastreos completos si encuentra algún problema.

El problema no es con Flask, y Werkzeug no seguirá admitiendo estas importaciones obsoletas. 0.16 ha estado emitiendo advertencias de obsolescencia durante 5 meses. Utilice esa versión como paso intermedio para identificar qué importaciones han cambiado.

Puede ayudar a las extensiones y otros proyectos abriendo un problema o enviando un PR en el proyecto relevante.

  • Frasco-Admin 1.5.5
  • Matraz-Babel 1.0
  • Matraz-BabelEx 0.9.4
  • flask-restplus (no combinado, no mantenido a favor de flask-restx)
  • flask-restx (combinado, aún no publicado)
  • Prueba de matraces 0.8.0
  • Matraz-WTF 0.14.3
  • extensiones de django 2.2.8
  • Pytest-frasco 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)

Eso es pytest-flask, querrás contactarlos. Parece que pytest-flask 0.15.1 ya se ha lanzado con una solución.

+1, que tiene el siguiente problema:
packages/flask_wtf/recaptcha/widgets.py", line 5, in <module> from werkzeug import url_encode ImportError: cannot import name 'url_encode'

+1 esta nueva versión también está rompiendo nuestras dependencias. Parece que es un problema de V1.0.0

`` Traceback (última llamada más reciente):
Archivo "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask/cli.py", línea 240, en Locate_app
__importar __ (nombre_módulo)
Archivo "/home/ec2-user/butter_web/butter.py", línea 1, en
desde la aplicación de importación de aplicaciones, db
Archivo "/home/ec2-user/butter_web/app/__init__.py", línea 8, en
desde flask_admin.contrib.sqla importar ModelView
Archivo "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", línea 2, en
desde .view importar ModelView
Archivo "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/view.py", línea 19, en
desde flask_admin.model importar BaseModelView
Archivo "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/__init__.py", línea 2, en
desde .base importar BaseModelView
Archivo "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/base.py", línea 8, en
de werkzeug importar nombre_archivo seguro
ImportError: no se puede importar el nombre 'secure_filename'

Cual es la solucion aqui? El bloqueo explícito de 0.16.1 no resuelve esto.

@ tjohnson4 Vea mi comentario anterior para saber qué hacer. El error que publicó sobre el problema de Flask no estaba relacionado.

Esta es una experiencia de usuario completamente terrible. Flask-WTF 0.14.3 con las correcciones se lanzó hace horas . ¿Cómo estamos lanzando un lanzamiento que elimina el soporte cuando partes masivas del ecosistema no estaban listas para esto?

Creo que esta es la tercera vez que una actualización de una de las bibliotecas de paletas rompió el código que tenía ejecutándose en menos de seis meses.

problema similar

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'

solución alterna
agregar werkzeug == 0.16.1 a requirements.txt lo resolvió por mí

La conexión de @ Abdelsalam-Abbas arregló esa importación en octubre de 2019; ¿tal vez esté ejecutando una versión anterior?
https://github.com/zalando/connexion/releases/tag/2.4.0

Si su Flask-Session está rota:

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'  

Agregue werkzeug == 0.16.1 a requirements.txt lo resolvió por mí

Si su Flask-RestPlus está roto:

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)

Agregue werkzeug == 0.16.1 a requirements.txt lo resolvió por mí.

¿A alguien le importaría dar una idea de por qué mi objeto de solicitud de matraz devuelto desde werkzeug LocalProxy es de una versión diferente a la que tengo localmente?

Desde esta versión, recibo este error:
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 es una propiedad que se eliminó en el Frasco 1.0 , pero localmente tengo 0.12.2 instalado. Para que quede claro, estoy publicando este problema aquí porque el error no está en Flask, más bien estoy confundido sobre por qué / cómo LocalProxy está devolviendo una versión más nueva de esta aplicación Flask, entonces estoy esperando.

@LucasLLC is_xhr nunca fue parte directa de Flask (¿hay alguna referencia que indique que se eliminó en Flask 1.0? No puedo verlo en el registro de cambios) sino que siempre ha sido una API Werkzeug que expone Flask. En términos de Werkzeug, puede ver que se elimina en 81e10efbf3a83daf09c55cd7cc13ac6c6464d405.

Si aún no lo ha hecho, le recomiendo anclar sus dependencias y actualizar periódicamente, una tarea que se facilita con herramientas como la poesía .

@pgjones idealmente hacemos una versión de corrección de errores del frasco 0.12 que fija werkzeug a <1.0.0. Después de todo, este es un pin malo en Flask.

También sí, esta API es efectivamente Flask API y se documentó como tal: https://flask.palletsprojects.com/en/0.12.x/api/#flask.Request.is_xhr

@LucasLLC is_xhr nunca fue parte directa de Flask (¿hay alguna referencia que indique que se eliminó en Flask 1.0? No puedo verlo en el registro de cambios) sino que siempre ha sido una API Werkzeug que expone Flask. En términos de Werkzeug, puede ver que se elimina en 81e10ef .

Ah, mi error. Estaba haciendo referencia a la advertencia generada en este método y no me di cuenta de que provenía de Werkzeug, eso tiene mucho más sentido.

Si aún no lo ha hecho, le recomiendo anclar sus dependencias y actualizar periódicamente, una tarea que se facilita con herramientas como la poesía .

¡Gracias por el consejo! Examinaremos la poesía.

Tuve un problema al instalar odoo12:

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

Sin embargo, lo resolvió con

Werkzeug==0.16.1

sucedió el mismo error

ModuleNotFoundError: ningún módulo llamado 'werkzeug.contrib'

Tener el mismo problema con el matraz

La configuración de Werkzeug==0.16.1 solucionó el problema.

''
desde flask_admin.contrib.sqla importar ModelView
Archivo "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", línea 2, en

desde .view importar ModelView
Archivo "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/view.py", línea 18, en

desde flask_admin.model importar BaseModelView
Archivo "/usr/local/lib/python3.6/site-packages/flask_admin/model/__init__.py", línea 2, en

desde .base importar BaseModelView
Archivo "/usr/local/lib/python3.6/site-packages/flask_admin/model/base.py", línea 8, en

de werkzeug importar nombre_archivo seguro
ImportError: no se puede importar el nombre 'secure_filename'

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

asottile picture asottile  ·  11Comentarios

Nessphoro picture Nessphoro  ·  6Comentarios

masklinn picture masklinn  ·  11Comentarios

androiddrew picture androiddrew  ·  14Comentarios

ngaya-ll picture ngaya-ll  ·  8Comentarios