summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2022-02-08 17:53:30 -0500
committerGitHub <noreply@github.com>2022-02-08 17:53:30 -0500
commit43d9e48e0d7c77f3bb4b6fbf572521ba642d6605 (patch)
treef3cdfebda490814fe24aece202aa1ea72a1e3a8a
parentda71fab6210e14e81047909c1b66444062842cfe (diff)
parent44b39e0df56b553aed045049ec30839fcb06cdd3 (diff)
downloadpython-setuptools-git-43d9e48e0d7c77f3bb4b6fbf572521ba642d6605.tar.gz
Merge pull request #3091 from maciejp-ro/remove-more_itertools.more
Remove more_itertools.more from vendored libs (fixes pypa/setuptools#3090)
-rw-r--r--changelog.d/3091.misc.rst4
-rw-r--r--pkg_resources/_vendor/more_itertools/more.py3
-rw-r--r--setuptools/_vendor/more_itertools/more.py3
-rw-r--r--tools/vendored.py17
4 files changed, 23 insertions, 4 deletions
diff --git a/changelog.d/3091.misc.rst b/changelog.d/3091.misc.rst
new file mode 100644
index 00000000..d6664125
--- /dev/null
+++ b/changelog.d/3091.misc.rst
@@ -0,0 +1,4 @@
+Make ``concurrent.futures`` import lazy in vendored ``more_itertools``
+package to a avoid importing threading as a side effect (which caused
+`gevent/gevent#1865 <https://github.com/gevent/gevent/issues/1865>`__).
+-- by :user:`maciejp-ro`
diff --git a/pkg_resources/_vendor/more_itertools/more.py b/pkg_resources/_vendor/more_itertools/more.py
index 630af973..6b6a5cab 100644
--- a/pkg_resources/_vendor/more_itertools/more.py
+++ b/pkg_resources/_vendor/more_itertools/more.py
@@ -2,7 +2,6 @@ import warnings
from collections import Counter, defaultdict, deque, abc
from collections.abc import Sequence
-from concurrent.futures import ThreadPoolExecutor
from functools import partial, reduce, wraps
from heapq import merge, heapify, heapreplace, heappop
from itertools import (
@@ -3656,7 +3655,7 @@ class callback_iter:
self._aborted = False
self._future = None
self._wait_seconds = wait_seconds
- self._executor = ThreadPoolExecutor(max_workers=1)
+ self._executor = __import__("concurrent.futures").futures.ThreadPoolExecutor(max_workers=1)
self._iterator = self._reader()
def __enter__(self):
diff --git a/setuptools/_vendor/more_itertools/more.py b/setuptools/_vendor/more_itertools/more.py
index 0f7d282a..e6fca4d4 100644
--- a/setuptools/_vendor/more_itertools/more.py
+++ b/setuptools/_vendor/more_itertools/more.py
@@ -2,7 +2,6 @@ import warnings
from collections import Counter, defaultdict, deque, abc
from collections.abc import Sequence
-from concurrent.futures import ThreadPoolExecutor
from functools import partial, reduce, wraps
from heapq import merge, heapify, heapreplace, heappop
from itertools import (
@@ -3454,7 +3453,7 @@ class callback_iter:
self._aborted = False
self._future = None
self._wait_seconds = wait_seconds
- self._executor = ThreadPoolExecutor(max_workers=1)
+ self._executor = __import__("concurrent.futures").futures.ThreadPoolExecutor(max_workers=1)
self._iterator = self._reader()
def __enter__(self):
diff --git a/tools/vendored.py b/tools/vendored.py
index 57e28d53..ee978e5c 100644
--- a/tools/vendored.py
+++ b/tools/vendored.py
@@ -64,6 +64,21 @@ def rewrite_importlib_resources(pkg_files, new_root):
file.write_text(text)
+def rewrite_more_itertools(pkg_files: Path):
+ """
+ Defer import of concurrent.futures. Workaround for #3090.
+ """
+ more_file = pkg_files.joinpath('more.py')
+ text = more_file.read_text()
+ text = re.sub(r'^.*concurrent.futures.*?\n', '', text, flags=re.MULTILINE)
+ text = re.sub(
+ 'ThreadPoolExecutor',
+ '__import__("concurrent.futures").futures.ThreadPoolExecutor',
+ text,
+ )
+ more_file.write_text(text)
+
+
def clean(vendor):
"""
Remove all files out of the vendor directory except the meta
@@ -96,6 +111,7 @@ def update_pkg_resources():
rewrite_jaraco_text(vendor / 'jaraco/text', 'pkg_resources.extern')
rewrite_jaraco(vendor / 'jaraco', 'pkg_resources.extern')
rewrite_importlib_resources(vendor / 'importlib_resources', 'pkg_resources.extern')
+ rewrite_more_itertools(vendor / "more_itertools")
def update_setuptools():
@@ -105,6 +121,7 @@ def update_setuptools():
rewrite_jaraco_text(vendor / 'jaraco/text', 'setuptools.extern')
rewrite_jaraco(vendor / 'jaraco', 'setuptools.extern')
rewrite_importlib_resources(vendor / 'importlib_resources', 'setuptools.extern')
+ rewrite_more_itertools(vendor / "more_itertools")
__name__ == '__main__' and update_vendored()