Werkzeug: 版本 1.0.0 删除了以前不推荐使用的代码

创建于 2020-02-06  ·  22评论  ·  资料来源: pallets/werkzeug

2 小时前推送的 1.0.0 版本发布了对使用烧瓶的人的重大更改。 不确定这是否是预期的效果,flask 应该固定他们的版本,或者这个项目是否需要发生变化。

最有用的评论

这是一种非常糟糕的用户体验。 带有修复程序的 Flask-WTF 0.14.3 已于数小时前发布。 当生态系统的大部分都没有为此做好准备时,我们如何推出一个取消支持的版本?

我相信这是我第三次对托盘库之一的更新破坏了我在不到六个月内运行的代码。

所有22条评论

如果您遇到任何问题,请发布完整的回溯。

问题不在于 Flask,Werkzeug 将不会继续支持这些已弃用的导入。 0.16 已经发布了 5 个月的弃用警告。 使用该版本作为中间步骤来确定哪些导入发生了变化。

您可以通过在相关项目中打开问题或提交 PR 来帮助扩展和其他项目。

  • 烧瓶管理 1.5.5
  • 烧瓶通天塔 1.0
  • Flask-BabelEx 0.9.4
  • flask-restplus(未合并,未维护以支持flask-restx)
  • flask-restx(已合并,尚未发布)
  • 烧瓶测试 0.8.0
  • Flask-WTF 0.14.3
  • Django 扩展 2.2.8
  • pytest 烧瓶 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)

那是 pytest-flask,您需要联系他们。 看起来 pytest-flask 0.15.1 已经发布了一个修复程序。

+1,有以下问题:
packages/flask_wtf/recaptcha/widgets.py", line 5, in <module> from werkzeug import url_encode ImportError: cannot import name 'url_encode'

+1 这个最新版本也打破了我们的依赖关系。 似乎是 V1.0.0 的问题

```回溯(最近一次调用最后一次):
文件“/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask/cli.py”,第 240 行,在 locate_app
__import__(module_name)
文件“/home/ec2-user/butter_web/butter.py”,第 1 行,在
从应用程序导入应用程序,数据库
文件“/home/ec2-user/butter_web/app/__init__.py”,第 8 行,在
从flask_admin.contrib.sqla 导入模型视图
文件“/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py”,第2行,在
从 .view 导入 ModelView
文件“/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/view.py”,第19行,在
从flask_admin.model 导入BaseModelView
文件“/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/__init__.py”,第2行,在
从 .base 导入 BaseModelView
文件“/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/base.py”,第8行,在
从 werkzeug 导入 secure_filename
导入错误:无法导入名称“secure_filename”

这里的解决方案是什么? 显式锁定 0.16.1 不能解决这个问题。

@tjohnson4请参阅我上面的评论以了解该怎么做。 您在 Flask 问题上发布的错误是无关的。

这是一种非常糟糕的用户体验。 带有修复程序的 Flask-WTF 0.14.3 已于数小时前发布。 当生态系统的大部分都没有为此做好准备时,我们如何推出一个取消支持的版本?

我相信这是我第三次对托盘库之一的更新破坏了我在不到六个月内运行的代码。

类似的问题

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'

解决方法
werkzeug == 0.16.1到 requirements.txt 为我解决了

@Abdelsalam-Abbas connexion 在 2019 年 10 月修复了该导入——也许您正在运行旧版本?
https://github.com/zalando/connexion/releases/tag/2.4.0

如果你的 Flask-Session 坏了:

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到 requirements.txt 为我解决了

如果您的 Flask-RestPlus 坏了:

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到 requirements.txt 为我解决了它。

有人会介意提供一些洞察为什么我从werkzeugLocalProxy返回的烧瓶请求对象来自不同的版本,然后我在本地拥有吗?

自此版本以来,我收到此错误:
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是在 Flask 1.0删除的属性,但在本地我安装了0.12.2 。 为了清楚起见,我在这里发布此问题是因为该错误不在 Flask 中,而我只是对LocalProxy为什么/如何返回此 Flask 应用程序的较新版本感到困惑,然后我期待。

@LucasLLC is_xhr从来都不是 Flask 的直接组成部分(有没有说明它在 Flask 1.0 中被删除了?我在更新日志中看不到它),而是它一直是 Flask 公开的 Werkzeug API。 就 Werkzeug 而言,您可以看到它在 81e10efbf3a83daf09c55cd7cc13ac6c6464d405 中被删除。

如果您还没有,我建议您固定您的依赖项并定期升级,通过诸如诗歌之类的工具可以轻松完成这项繁琐的工作。

@pgjones理想情况下,我们对flask 0.12 进行了错误修复版本,将werkzeug 固定到< 1.0.0。 这毕竟是 Flask 中的一个坏引脚。

同样是的,这个 API 是有效的 Flask API,它被记录如下: https :

@LucasLLC is_xhr从来都不是 Flask 的直接组成部分(有没有说明它在 Flask 1.0 中被删除了?我在更新日志中看不到它),而是它一直是 Flask 公开的 Werkzeug API。 就 Werkzeug 而言,您可以看到它已在81e10ef 中删除。

啊,我的错。 我正在引用方法中生成的警告,但没有意识到它来自 Werkzeug,这更有意义。

如果您还没有,我建议您固定您的依赖项并定期升级,通过诸如诗歌之类的工具可以轻松完成这项繁琐的工作。

谢谢你的提示! 我们将研究诗歌。

安装odoo12时出现问题:

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

但是,解决了它

Werkzeug==0.16.1

发生了同样的错误

ModuleNotFoundError:没有名为“werkzeug.contrib”的模块

与烧瓶有同样的问题

设置Werkzeug==0.16.1解决了这个问题。

``
从flask_admin.contrib.sqla 导入模型视图
文件“/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py”,第2行,在

从 .view 导入 ModelView
文件“/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/view.py”,第18行,在

从flask_admin.model 导入BaseModelView
文件“/usr/local/lib/python3.6/site-packages/flask_admin/model/__init__.py”,第2行,在

从 .base 导入 BaseModelView
文件“/usr/local/lib/python3.6/site-packages/flask_admin/model/base.py”,第8行,在

从 werkzeug 导入 secure_filename
导入错误:无法导入名称“secure_filename”

此页面是否有帮助?
0 / 5 - 0 等级