令人讨厌的CryptographyDeprecationWarning因为缺少hmac.compare_time函数无处不在

问题描述 投票:6回答:4

事情一直很顺利,直到我的一个项目开始在每个执行的顶部打印到这个,至少一次:

local/lib/python2.7/site-packages/cryptography/hazmat/primitives/constant_time.py:26: CryptographyDeprecationWarning: Support for your Python version is deprecated. The next version of cryptography will remove support. Please upgrade to a 2.7.x release that supports hmac.compare_digest as soon as possible.

我不知道它为什么开始它会破坏应用程序的/工具输出,特别是当它被其他工具捕获和使用时。像许多困难一样,我很确定它与urllibrequests有关。更糟糕的是,我有很多项目和交叉依赖,我不可能通过调用warnings.filterwarnings()来更新所有导入和分支来抑制警告。

我有Python 2.7.6。显然这在2.7.7中消失了。只有,我有一些系统有2.7.6,我没有看到警告。因此,某个版本可能会或可能不会禁用它们,我可能会无意中将其替换为另一个版本。

我的Ubuntu,Python,urllib,请求(带有安全选项),加密和hmac都是打印警告的系统上的相同版本/版本,而不是。

在线似乎没有相关的警告或公告,此时似乎任何相关项目都是静态/稳定的(即使'hmac'可以通过PIP安装,但它在八年内没有变化)。

python python-requests urllib urllib3
4个回答
22
投票

我打了这个错误很长一段时间。对于我的环境,将Python升级到2.7.6以上的版本是一件痛苦的事。更简单的解决方案是使用pip降级加密模块:

pip2.7 install cryptography==2.2.2

我认为最好的解决方案是升级你的python版本


3
投票

这个答案适用于Python3

我使用Paramiko寻找答案来到这里。对于那些仍在寻找简单答案的人。在导入Paramiko之前,我使用这些代码行来获取这些CryptographyDeprecationWarning:

import warning 
warnings.filterwarnings(action='ignore',module='.*paramiko.*')

我希望这有帮助


2
投票

我开始收到一个简单的requests.get电话的警告。加载模块cryptography.hazmat.primitives.constant_time时会打印此警告,因此每个Python程序通常只会出现一次。如果您多次看到它,那一定是因为Python程序(如实用程序)被多次执行。您只需要识别该程序并将以下代码添加到主入口点:

import cryptography
from cryptography import utils
with warnings.catch_warnings():
    warnings.simplefilter('ignore', cryptography.utils.DeprecatedIn23)
    import cryptography.hazmat.primitives.constant_time

0
投票

当您执行pip2.7 install cryptography == 2.2.2时,可能仍会出现错误。我相信你也需要sudo pip2.7 install --upgrade pip Aso,截至5/5/19,最新的似乎是密码学= 2.6.1

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.