Requests: urllib3 v1.25-Unterstützung

Erstellt am 23. Apr. 2019  ·  15Kommentare  ·  Quelle: psf/requests

Unterstützung für urllib3 v1.25 (heute/gestern veröffentlicht). Das übliche yada-yada „mein CI ist kaputt“.

Mehrere Pakete, von denen wir abhängen (z. B. google.cloud.storage , azure.storage ), haben eine strenge Versionsprüfung für requests mit pkg_resources.require('requests >= 2.18.0') . Alle nicht erfüllten Abhängigkeiten in der folgenden Kette einschließlich requests führen dazu, dass die Prüfung fehlschlägt und eine Ausnahme auslöst. urllib3<1.25 ist derzeit eine solche Abhängigkeit.

erwartetes Ergebnis

Beim Import wurde keine Ausnahme ausgelöst

Tatsächliche Ergebnis

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].

Reproduktionsschritte

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
}

Hilfreichster Kommentar

Hier ist eine möglicherweise dumme Frage: Warum beschränken Anfragen urllib3 auf < 1,25? Da viele andere Pip-Abhängigkeiten ihre minimal zulässige urllib3-Version weiter erhöhen werden, scheint dies zwei Dinge zu garantieren:

  1. Jeder geringfügige Versionsstoß in urllib3 wird viele Projekte zerstören, die von Anfragen abhängen (z. B. jeder, der unter vielen anderen die großen Google- oder Microsoft Azure-Pakete verwendet).
  2. Jeder kleinere Versionsstoß in urllib3 erfordert dann eine neue Version von Anfragen, um die neue Version von urllib3 zuzulassen.

Nimmt urllib3 so oft Breaking Changes vor, dass wir uns Sorgen machen, nur ihrer Versionierung zu vertrauen? Oder gibt es eine andere Sorge?

Alle 15 Kommentare

Beachten Sie, dass ein Pull-Request, der dies behebt, #5065 und #4961 schließen sollte

Beachten Sie auch, dass eine Lösung für das obige Reproduktionsbeispiel ist:

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

Es ist bereits eine PR in Arbeit: https://github.com/kennethreitz/requests/pull/5063

Für diejenigen, die zuschauen, wie bereits erwähnt , wir sind auf urllib3 v1.25.2 blockiert

@nateprewitt FYI 1.25.2 wird sehr bald veröffentlicht, ich würde empfehlen, zusätzlich zum Verbieten von 1.25.0 auch 1.25.1 zu verbieten?

Unsere CI-Pipeline beginnt ab dem 22. April, ab dem Zeitpunkt der Veröffentlichung von urllib3 Version 1.25, einen Fehler [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 zu erhalten. Glauben Sie, dass dies mit diesem Problem zusammenhängt?

@rkooo567 , haben Sie versucht, das CI mit der zusätzlichen Anforderung urllib3<1.25 auszuführen?

@EpicWink Ja. Und es scheint, als würde es ein Problem lösen. Ich fand auch heraus, dass urllib3==1.25.2 das Problem ebenfalls löst.

urllib3 1.24.3 wurde veröffentlicht, das nur das CRLF-Injection-Problem für 1.24.X-Benutzer behebt.

Hier ist eine möglicherweise dumme Frage: Warum beschränken Anfragen urllib3 auf < 1,25? Da viele andere Pip-Abhängigkeiten ihre minimal zulässige urllib3-Version weiter erhöhen werden, scheint dies zwei Dinge zu garantieren:

  1. Jeder geringfügige Versionsstoß in urllib3 wird viele Projekte zerstören, die von Anfragen abhängen (z. B. jeder, der unter vielen anderen die großen Google- oder Microsoft Azure-Pakete verwendet).
  2. Jeder kleinere Versionsstoß in urllib3 erfordert dann eine neue Version von Anfragen, um die neue Version von urllib3 zuzulassen.

Nimmt urllib3 so oft Breaking Changes vor, dass wir uns Sorgen machen, nur ihrer Versionierung zu vertrauen? Oder gibt es eine andere Sorge?

Basierend auf der Anzahl der Verweise auf dieses Problem in den Trackern anderer Projekte, bin ich sicher, dass es viele andere Projektbetreuer gibt, die eine Lösung für dieses Problem eher früher als später begrüßen würden ... :) (Ich weise darauf hin, da Verweise auf Probleme nicht keine E-Mail-Benachrichtigungen auslösen.)

+1, weil es in einigen Fällen Probleme verschlimmert, die durch das Fehlen eines Dependency-Resolvers von Pip verursacht werden: https://github.com/pradyunsg/zazo/issues/14

Wenn Sie denken, dass das Spaß macht, schauen Sie sich all die Dinge an, die Anfragen verwenden und urllib3 nicht aktualisieren können. (wir führen einige manuelle Überprüfungen durch)

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

Gelöst mit #5092, Release ist jetzt auf pypi. Nochmals vielen Dank @EpicWink

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen