Python 如何摆脱第三代收藏。abc弃用警告

Python 如何摆脱第三代收藏。abc弃用警告,python,Python,我的应用程序中充斥着来自第三个软件包的警告 transformers/modeling_deberta.py:18: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.9 it will stop working from collections import Se

我的应用程序中充斥着来自第三个软件包的警告

transformers/modeling_deberta.py:18: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.9 it will stop working
from collections import Sequence
如何抑制这些警告

我试过:

export PYTHONWARNINGS="ignore::DeprecationWarning"
warnings.filterwarnings(action="ignore")
warnings.filterwarnings(action="ignore", category=DeprecationWarning)
warnings.filterwarnings(action="ignore", category=DeprecationWarning, module=r".*transformers.*")
warnings.filterwarnings(action="ignore", category=DeprecationWarning, module=r".*collections.*")
warnings.filterwarnings(action="ignore", message=r".*collections.abc.*")
更新 以下选项不可行:

  • 删除生成这些警告的第三个程序包。这是不可替代的
  • 降级到python 3.3

也许我应该等第三个软件包升级。只是想知道是否还有其他选项可以禁止python中的特定第三方警告。

该警告告诉您,您正在从一个在python 3.3之前是正确的位置获取一些资源,并且从python 3.9开始根本无法工作。您使用的Python版本介于3.3和3.9之间,这意味着这在目前仍然适用,但您需要重构代码,以便从
集合.abc
导入abc,而不是从
集合
。除非您按照错误提示的方式重构代码,否则您将使用3.9之前的Python版本,这限制了您的可能性,将不允许使用这些版本之后实现的任何好东西,并且将越来越多地看到库与您的项目不兼容,因为它们对于您的项目来说过于现代

您可以通过将项目降级到3.3之前的Python版本来消除警告,但如果可能的话,这是您应该努力避免的方向。最好的解决方案是重构您的项目以符合现代Python版本的条款,如果您使用的软件包阻止您这样做,那么您可能需要升级这些软件包。如果没有升级可以解决这个问题,那么很值得一提的问题是,以更现代的方式实现它们的功能在您的劳动力方面是更高的成本,还是在技术短缺方面是更高的成本,如果您使用的是旧的Python版本。

我从

解决方案:确保在导入第三个包之前运行以下代码

with warnings.catch_warnings():
    warnings.filterwarnings("ignore", category=DeprecationWarning)
    from collections import Sequence

只需将
从集合导入序列
更改为
从集合.abc导入序列
。如果代码无法修改,那么您可以随时回滚到较早的Python版本。在某个时候,你需要做一个或另一个,因为它将不再是一个警告,如果你升级到3.9,它将失败。谢谢你的详细回答。不幸的是,这些选项对我的项目不可行。我更新了我的问题。@phi我理解你的观点。由于您的版本在某个级别以下,但在另一个特定级别以上,正好在始终显示这些警告的时间间隔内,所以随着时间的推移,它会变得很失败。我坚持我的答案是正确的,即使你现在没有选择去应用它。虽然您的选项受到限制,但您可能希望取消显示警告。有关更多信息,请参阅此答案: