Requests: urllib3 v1.25 支持

创建于 2019-04-23  ·  15评论  ·  资料来源: psf/requests

支持urllib3 v1.25 (今天/昨天发布)。 通常的 yada-yada “我的 CI 坏了”。

我们依赖的多个包(例如google.cloud.storageazure.storage )使用pkg_resources.require('requests >= 2.18.0')requests进行严格的版本检查。 以下链中的任何未满足的依赖项,包括requests将导致检查失败并引发异常。 urllib3<1.25目前就是这样一种依赖。

预期结果

进口无异常

实际结果

pkg_resources.ContextualVersionConflict: (urllib3 1.25 (/usr/local/lib/python3.6/dist-packages), Requirement.parse('urllib3<1.25,>=1.21.1'), {'requests'})

The above exception was the direct cause of the following exception:
ImportError: ``requests >= 2.18.0`` is required by the ``google.resumable_media.requests`` subpackage.
It can be installed via
    pip install google-resumable-media[requests].

复制步骤

pip3 install sentry-sdk google-cloud-storage
>>> from google.cloud import storage



md5-cbc1943a1d569f335059802806d81765



/home/laurie/env-tmp/lib/python3.6/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25) or chardet (3.0.4) doesn't match a supported version!
  RequestsDependencyWarning)
{
  "chardet": {
    "version": "3.0.4"
  },
  "cryptography": {
    "version": ""
  },
  "idna": {
    "version": "2.8"
  },
  "implementation": {
    "name": "CPython",
    "version": "3.6.7"
  },
  "platform": {
    "release": "4.18.0-17-generic",
    "system": "Linux"
  },
  "pyOpenSSL": {
    "openssl_version": "",
    "version": null
  },
  "requests": {
    "version": "2.21.0"
  },
  "system_ssl": {
    "version": "1010100f"
  },
  "urllib3": {
    "version": "1.25"
  },
  "using_pyopenssl": false
}

最有用的评论

这是一个可能很愚蠢的问题:为什么 requests 将 urllib3 限制为 < 1.25? 由于许多其他 pip 依赖项将继续增加其允许的最低 urllib3 版本,似乎这将保证两件事:

  1. urllib3 中的每个次要版本都会破坏许多依赖于请求的项目(例如,任何使用主要 Google 或 Microsoft Azure 软件包的人,等等)。
  2. urllib3 中的每个次要版本都将需要新版本的请求以允许新版本的 urllib3。

urllib3 是否经常做出让我们担心只是信任他们的版本控制的重大更改? 还是有其他顾虑?

所有15条评论

请注意,修复此问题的拉取请求应关闭 #5065 和 #4961

另请注意,上述复制示例的解决方案是:

pip3 install sentry-sdk google-cloud-storage 'urllib3<1.25'

已经有一个 PR 正在进行中: https ://github.com/kennethreitz/requests/pull/5063

对于那些观看的人,如前所述,我们在urllib3 v1.25.2 上被阻止

@nateprewitt仅供参考 1.25.2 将很快发布,我建议除了禁止 1.25.0 还禁止 1.25.1?

我们的 CI 管道从 4 月 22 日开始出现错误[integration_py3_docker_metric] 19-04-29:10:26:57 ERROR [clipper_metric_docker.py:127] Failed to parse: http://localhost:44328/api/v1/series?match[]=clipper_mc_parse_time_ms_sum ,从urllib3版本 1.25 发布开始。 你认为这与这个问题有关吗?

@rkooo567 ,您是否尝试过运行带有额外要求urllib3<1.25的 CI?

@EpicWink是的。 它似乎解决了一个问题。 我还发现urllib3==1.25.2也解决了这个问题。

urllib3 1.24.3 已发布,仅修复了 1.24.X 用户的 CRLF 注入问题。

这是一个可能很愚蠢的问题:为什么 requests 将 urllib3 限制为 < 1.25? 由于许多其他 pip 依赖项将继续增加其允许的最低 urllib3 版本,似乎这将保证两件事:

  1. urllib3 中的每个次要版本都会破坏许多依赖于请求的项目(例如,任何使用主要 Google 或 Microsoft Azure 软件包的人,等等)。
  2. urllib3 中的每个次要版本都将需要新版本的请求以允许新版本的 urllib3。

urllib3 是否经常做出让我们担心只是信任他们的版本控制的重大更改? 还是有其他顾虑?

根据其他项目跟踪器中对这个问题的引用数量,我敢肯定还有很多其他项目维护者希望尽快解决这个问题……:)(指出它,因为问题引用没有' t 触发电子邮件通知。)

+1,因为它在某些情况下加剧了Pip 缺乏依赖解析器引起的问题: https ://github.com/pradyunsg/zazo/issues/14

如果你觉得这很有趣,请查看所有使用请求且无法更新 urllib3 的东西。 (我们做一些人工检查)

http://logs.openstack.org/36/658636/3/check/requirements-tox-py27-check-uc/48d2334/job-output.txt.gz#_2019 -05-14_06_33_55_887702

已通过 #5092 解决,现在在 pypi 上发布。 再次感谢@EpicWink

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