[Python-checkins] bpo-41490: Update ensurepip to install pip 20.2.1 and setuptools 49.2.1 (GH-21775)

Steve Dower webhook-mailer at python.org
Fri Aug 7 18:10:41 EDT 2020


https://github.com/python/cpython/commit/135de08128a76f49752ac57c316129500275e828
commit: 135de08128a76f49752ac57c316129500275e828
branch: 3.8
author: Steve Dower <steve.dower at python.org>
committer: GitHub <noreply at github.com>
date: 2020-08-07T23:10:32+01:00
summary:

bpo-41490: Update ensurepip to install pip 20.2.1 and setuptools 49.2.1 (GH-21775)

files:
A Lib/ensurepip/_bundled/pip-20.2.1-py2.py3-none-any.whl
A Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl
A Misc/NEWS.d/next/Library/2020-08-05-23-16-39.bpo-41490.6z47A_.rst
D Lib/ensurepip/_bundled/pip-20.1.1-py2.py3-none-any.whl
D Lib/ensurepip/_bundled/setuptools-47.1.0-py3-none-any.whl
M .github/workflows/build_msi.yml
M Lib/ensurepip/__init__.py
M Lib/test/test_importlib/test_resource.py

diff --git a/.github/workflows/build_msi.yml b/.github/workflows/build_msi.yml
index 769b3d012e940..e35ebe4256522 100644
--- a/.github/workflows/build_msi.yml
+++ b/.github/workflows/build_msi.yml
@@ -8,6 +8,7 @@ on:
     - 3.7
     paths:
     - 'Tools/msi/**'
+    - 'Lib/ensurepip/**'
   pull_request:
     branches:
     - master
@@ -15,6 +16,7 @@ on:
     - 3.7
     paths:
     - 'Tools/msi/**'
+    - 'Lib/ensurepip/**'
 
 jobs:
   build_win32:
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index f3152a55d4430..9415fd73b80dd 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -9,9 +9,9 @@
 __all__ = ["version", "bootstrap"]
 
 
-_SETUPTOOLS_VERSION = "47.1.0"
+_SETUPTOOLS_VERSION = "49.2.1"
 
-_PIP_VERSION = "20.1.1"
+_PIP_VERSION = "20.2.1"
 
 _PROJECTS = [
     ("setuptools", _SETUPTOOLS_VERSION, "py3"),
diff --git a/Lib/ensurepip/_bundled/pip-20.1.1-py2.py3-none-any.whl b/Lib/ensurepip/_bundled/pip-20.2.1-py2.py3-none-any.whl
similarity index 54%
rename from Lib/ensurepip/_bundled/pip-20.1.1-py2.py3-none-any.whl
rename to Lib/ensurepip/_bundled/pip-20.2.1-py2.py3-none-any.whl
index ea1d0f7c8604a..3d0d3f8ae7fac 100644
Binary files a/Lib/ensurepip/_bundled/pip-20.1.1-py2.py3-none-any.whl and b/Lib/ensurepip/_bundled/pip-20.2.1-py2.py3-none-any.whl differ
diff --git a/Lib/ensurepip/_bundled/setuptools-47.1.0-py3-none-any.whl b/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl
similarity index 54%
rename from Lib/ensurepip/_bundled/setuptools-47.1.0-py3-none-any.whl
rename to Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl
index f87867ff98254..308e2f2ed5ed9 100644
Binary files a/Lib/ensurepip/_bundled/setuptools-47.1.0-py3-none-any.whl and b/Lib/ensurepip/_bundled/setuptools-49.2.1-py3-none-any.whl differ
diff --git a/Lib/test/test_importlib/test_resource.py b/Lib/test/test_importlib/test_resource.py
index f88d92d154672..e132c57282b37 100644
--- a/Lib/test/test_importlib/test_resource.py
+++ b/Lib/test/test_importlib/test_resource.py
@@ -1,10 +1,13 @@
 import sys
 import unittest
+import uuid
 
 from . import data01
 from . import zipdata01, zipdata02
 from . import util
 from importlib import resources, import_module
+from pathlib import Path
+from test import support
 
 
 class ResourceTests:
@@ -162,5 +165,71 @@ def test_namespaces_cannot_have_resources(self):
             'test.test_importlib.data03.namespace', 'resource1.txt')
 
 
+class DeletingZipsTest(unittest.TestCase):
+    """Having accessed resources in a zip file should not keep an open
+    reference to the zip.
+    """
+    ZIP_MODULE = zipdata01
+
+    def setUp(self):
+        modules = support.modules_setup()
+        self.addCleanup(support.modules_cleanup, *modules)
+
+        data_path = Path(self.ZIP_MODULE.__file__)
+        data_dir = data_path.parent
+        self.source_zip_path = data_dir / 'ziptestdata.zip'
+        self.zip_path = Path.cwd() / '{}.zip'.format(uuid.uuid4())
+        self.zip_path.write_bytes(self.source_zip_path.read_bytes())
+        sys.path.append(str(self.zip_path))
+        self.data = import_module('ziptestdata')
+
+    def tearDown(self):
+        try:
+            sys.path.remove(str(self.zip_path))
+        except ValueError:
+            pass
+
+        try:
+            del sys.path_importer_cache[str(self.zip_path)]
+            del sys.modules[self.data.__name__]
+        except KeyError:
+            pass
+
+        try:
+            support.unlink(self.zip_path)
+        except OSError:
+            # If the test fails, this will probably fail too
+            pass
+
+    def test_contents_does_not_keep_open(self):
+        c = resources.contents('ziptestdata')
+        self.zip_path.unlink()
+
+    def test_is_resource_does_not_keep_open(self):
+        c = resources.is_resource('ziptestdata', 'binary.file')
+        self.zip_path.unlink()
+
+    def test_is_resource_failure_does_not_keep_open(self):
+        c = resources.is_resource('ziptestdata', 'not-present')
+        self.zip_path.unlink()
+
+    def test_path_does_not_keep_open(self):
+        c = resources.path('ziptestdata', 'binary.file')
+        self.zip_path.unlink()
+
+    def test_entered_path_does_not_keep_open(self):
+        # This is what certifi does on import to make its bundle
+        # available for the process duration.
+        c = resources.path('ziptestdata', 'binary.file').__enter__()
+        self.zip_path.unlink()
+
+    def test_read_binary_does_not_keep_open(self):
+        c = resources.read_binary('ziptestdata', 'binary.file')
+        self.zip_path.unlink()
+
+    def test_read_text_does_not_keep_open(self):
+        c = resources.read_text('ziptestdata', 'utf-8.file', encoding='utf-8')
+        self.zip_path.unlink()
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2020-08-05-23-16-39.bpo-41490.6z47A_.rst b/Misc/NEWS.d/next/Library/2020-08-05-23-16-39.bpo-41490.6z47A_.rst
new file mode 100644
index 0000000000000..e89180db00429
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-08-05-23-16-39.bpo-41490.6z47A_.rst
@@ -0,0 +1 @@
+Update :mod:`ensurepip` to install pip 20.2.1 and setuptools 49.2.1.



More information about the Python-checkins mailing list