diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 77754fc021..7f466d4f0a 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 60.8.1 +current_version = 60.8.2 commit = True tag = True diff --git a/.github/workflows/ci-sage.yml b/.github/workflows/ci-sage.yml index 573b269b3b..b802a58c79 100644 --- a/.github/workflows/ci-sage.yml +++ b/.github/workflows/ci-sage.yml @@ -7,7 +7,7 @@ name: Run Sage CI for Linux ## - continuous integration, by building and testing other software ## that depends on this project. ## -## It runs on every pull request and push of a tag to the GitHub repository. +## It runs on every push of a tag to the GitHub repository. ## ## The testing can be monitored in the "Actions" tab of the GitHub repository. ## @@ -33,11 +33,7 @@ name: Run Sage CI for Linux ## Many copies of the second step are run in parallel for each of the tested ## systems/configurations. -#on: [push, pull_request] - on: - pull_request: - types: [opened, synchronize] push: tags: - '*' diff --git a/CHANGES.rst b/CHANGES.rst index 0183241bb7..cd46ace6a0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,15 @@ +v60.8.2 +------- + + +Misc +^^^^ +* #3091: Make ``concurrent.futures`` import lazy in vendored ``more_itertools`` + package to a avoid importing threading as a side effect (which caused + `gevent/gevent#1865 `__). + -- by :user:`maciejp-ro` + + v60.8.1 ------- diff --git a/bootstrap.py b/bootstrap.py deleted file mode 100644 index 229b996503..0000000000 --- a/bootstrap.py +++ /dev/null @@ -1,7 +0,0 @@ -import warnings - - -msg = "bootstrap.py is no longer needed. Use a PEP-517-compatible builder instead." - - -__name__ == '__main__' and warnings.warn(msg) diff --git a/pkg_resources/_vendor/more_itertools/more.py b/pkg_resources/_vendor/more_itertools/more.py index 630af973f2..6b6a5cab25 100644 --- a/pkg_resources/_vendor/more_itertools/more.py +++ b/pkg_resources/_vendor/more_itertools/more.py @@ -2,7 +2,6 @@ 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 @@ def __init__(self, func, callback_kwd='callback', wait_seconds=0.1): 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/setup.cfg b/setup.cfg index d6f08caa50..24eda5a36c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = setuptools -version = 60.8.1 +version = 60.8.2 author = Python Packaging Authority author_email = distutils-sig@python.org description = Easily download, build, install, upgrade, and uninstall Python packages diff --git a/setuptools/_vendor/more_itertools/more.py b/setuptools/_vendor/more_itertools/more.py index 0f7d282aa5..e6fca4d47f 100644 --- a/setuptools/_vendor/more_itertools/more.py +++ b/setuptools/_vendor/more_itertools/more.py @@ -2,7 +2,6 @@ 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 @@ def __init__(self, func, callback_kwd='callback', wait_seconds=0.1): 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 7447890237..8a122ad778 100644 --- a/tools/vendored.py +++ b/tools/vendored.py @@ -74,6 +74,21 @@ def rewrite_importlib_metadata(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 @@ -106,6 +121,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(): @@ -116,6 +132,7 @@ def update_setuptools(): rewrite_jaraco(vendor / 'jaraco', 'setuptools.extern') rewrite_importlib_resources(vendor / 'importlib_resources', 'setuptools.extern') rewrite_importlib_metadata(vendor / 'importlib_metadata', 'setuptools.extern') + rewrite_more_itertools(vendor / "more_itertools") __name__ == '__main__' and update_vendored()