From b8f1fcf863081fde0b9d558759c0e3c46ce09a12 Mon Sep 17 00:00:00 2001 From: Ben Darnell <> Date: Fri, 28 May 2021 16:01:41 +0000 Subject: [PATCH] Avoid importing a non-vendored version of Tornado Code depending on this conditional import could break if an old version of Tornado is present in the environment, rendering pip unusable. --- news/10020.bugfix.rst | 1 + src/pip/_vendor/tenacity/__init__.py | 10 ++++++---- tools/vendoring/patches/tenacity.patch | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 news/10020.bugfix.rst create mode 100644 tools/vendoring/patches/tenacity.patch diff --git a/news/10020.bugfix.rst b/news/10020.bugfix.rst new file mode 100644 index 000000000..9425626fb --- /dev/null +++ b/news/10020.bugfix.rst @@ -0,0 +1 @@ +Remove unused optional ``tornado`` import in vendored ``tenacity`` to prevent old versions of Tornado from breaking pip. diff --git a/src/pip/_vendor/tenacity/__init__.py b/src/pip/_vendor/tenacity/__init__.py index 5f8cb5058..42e9d8940 100644 --- a/src/pip/_vendor/tenacity/__init__.py +++ b/src/pip/_vendor/tenacity/__init__.py @@ -22,10 +22,12 @@ try: except ImportError: iscoroutinefunction = None -try: - import tornado -except ImportError: - tornado = None +# Replace a conditional import with a hard-coded None so that pip does +# not attempt to use tornado even if it is present in the environment. +# If tornado is non-None, tenacity will attempt to execute some code +# that is sensitive to the version of tornado, which could break pip +# if an old version is found. +tornado = None import sys import threading diff --git a/tools/vendoring/patches/tenacity.patch b/tools/vendoring/patches/tenacity.patch new file mode 100644 index 000000000..006588b36 --- /dev/null +++ b/tools/vendoring/patches/tenacity.patch @@ -0,0 +1,21 @@ +diff --git a/src/pip/_vendor/tenacity/__init__.py b/src/pip/_vendor/tenacity/__init__.py +index 5f8cb5058..42e9d8940 100644 +--- a/src/pip/_vendor/tenacity/__init__.py ++++ b/src/pip/_vendor/tenacity/__init__.py +@@ -22,10 +22,12 @@ try: + except ImportError: + iscoroutinefunction = None + +-try: +- import tornado +-except ImportError: +- tornado = None ++# Replace a conditional import with a hard-coded None so that pip does ++# not attempt to use tornado even if it is present in the environment. ++# If tornado is non-None, tenacity will attempt to execute some code ++# that is sensitive to the version of tornado, which could break pip ++# if an old version is found. ++tornado = None + + import sys + import threading