Skip to content

Commit 43d9e48

Browse files
authored
Merge pull request #3091 from maciejp-ro/remove-more_itertools.more
Remove more_itertools.more from vendored libs (fixes #3090)
2 parents da71fab + 44b39e0 commit 43d9e48

File tree

4 files changed

+23
-4
lines changed

4 files changed

+23
-4
lines changed

changelog.d/3091.misc.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Make ``concurrent.futures`` import lazy in vendored ``more_itertools``
2+
package to a avoid importing threading as a side effect (which caused
3+
`gevent/gevent#1865 <https://github.com/gevent/gevent/issues/1865>`__).
4+
-- by :user:`maciejp-ro`

pkg_resources/_vendor/more_itertools/more.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from collections import Counter, defaultdict, deque, abc
44
from collections.abc import Sequence
5-
from concurrent.futures import ThreadPoolExecutor
65
from functools import partial, reduce, wraps
76
from heapq import merge, heapify, heapreplace, heappop
87
from itertools import (
@@ -3656,7 +3655,7 @@ def __init__(self, func, callback_kwd='callback', wait_seconds=0.1):
36563655
self._aborted = False
36573656
self._future = None
36583657
self._wait_seconds = wait_seconds
3659-
self._executor = ThreadPoolExecutor(max_workers=1)
3658+
self._executor = __import__("concurrent.futures").futures.ThreadPoolExecutor(max_workers=1)
36603659
self._iterator = self._reader()
36613660

36623661
def __enter__(self):

setuptools/_vendor/more_itertools/more.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from collections import Counter, defaultdict, deque, abc
44
from collections.abc import Sequence
5-
from concurrent.futures import ThreadPoolExecutor
65
from functools import partial, reduce, wraps
76
from heapq import merge, heapify, heapreplace, heappop
87
from itertools import (
@@ -3454,7 +3453,7 @@ def __init__(self, func, callback_kwd='callback', wait_seconds=0.1):
34543453
self._aborted = False
34553454
self._future = None
34563455
self._wait_seconds = wait_seconds
3457-
self._executor = ThreadPoolExecutor(max_workers=1)
3456+
self._executor = __import__("concurrent.futures").futures.ThreadPoolExecutor(max_workers=1)
34583457
self._iterator = self._reader()
34593458

34603459
def __enter__(self):

tools/vendored.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,21 @@ def rewrite_importlib_resources(pkg_files, new_root):
6464
file.write_text(text)
6565

6666

67+
def rewrite_more_itertools(pkg_files: Path):
68+
"""
69+
Defer import of concurrent.futures. Workaround for #3090.
70+
"""
71+
more_file = pkg_files.joinpath('more.py')
72+
text = more_file.read_text()
73+
text = re.sub(r'^.*concurrent.futures.*?\n', '', text, flags=re.MULTILINE)
74+
text = re.sub(
75+
'ThreadPoolExecutor',
76+
'__import__("concurrent.futures").futures.ThreadPoolExecutor',
77+
text,
78+
)
79+
more_file.write_text(text)
80+
81+
6782
def clean(vendor):
6883
"""
6984
Remove all files out of the vendor directory except the meta
@@ -96,6 +111,7 @@ def update_pkg_resources():
96111
rewrite_jaraco_text(vendor / 'jaraco/text', 'pkg_resources.extern')
97112
rewrite_jaraco(vendor / 'jaraco', 'pkg_resources.extern')
98113
rewrite_importlib_resources(vendor / 'importlib_resources', 'pkg_resources.extern')
114+
rewrite_more_itertools(vendor / "more_itertools")
99115

100116

101117
def update_setuptools():
@@ -105,6 +121,7 @@ def update_setuptools():
105121
rewrite_jaraco_text(vendor / 'jaraco/text', 'setuptools.extern')
106122
rewrite_jaraco(vendor / 'jaraco', 'setuptools.extern')
107123
rewrite_importlib_resources(vendor / 'importlib_resources', 'setuptools.extern')
124+
rewrite_more_itertools(vendor / "more_itertools")
108125

109126

110127
__name__ == '__main__' and update_vendored()

0 commit comments

Comments
 (0)