Imported Upstream version 47.2.0 upstream/47.2.0
authorDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 29 Dec 2020 22:06:27 +0000 (07:06 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 29 Dec 2020 22:06:27 +0000 (07:06 +0900)
.bumpversion.cfg
CHANGES.rst
setup.cfg
setuptools/command/easy_install.py
setuptools/tests/test_easy_install.py
tox.ini

index 23226c351b10cc4aed56c6a54a46e7de52c60a08..ffb0f2e8133db49d6ed0f8c47fa3a1256f90ce9e 100644 (file)
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 47.1.1
+current_version = 47.2.0
 commit = True
 tag = True
 
index b018cbea4d899c0be4dfcbe7269faebb90a447c0..44abab75e7f1dc618520e2618114ca6d8be9ca30 100644 (file)
@@ -1,3 +1,9 @@
+v47.2.0
+-------
+
+* #2194: Editable-installed entry points now load significantly faster on Python versions 3.8+.
+
+
 v47.1.1
 -------
 
index 66fb8921b9de09c656a786cbcd46ef93bde1aca9..4beae652ed8446b798b3a0e097d06c41aeae5a90 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -16,7 +16,7 @@ formats = zip
 
 [metadata]
 name = setuptools
-version = 47.1.1
+version = 47.2.0
 description = Easily download, build, install, upgrade, and uninstall Python packages
 author = Python Packaging Authority
 author_email = distutils-sig@python.org
index 5a9576ff29c9968f515030a849f53cb8f2a89393..ab8258ca831d1070c7d6276cfe343a60d76aa31f 100644 (file)
@@ -2070,19 +2070,33 @@ class ScriptWriter:
     gui apps.
     """
 
-    template = textwrap.dedent(r"""
-        # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
-        __requires__ = %(spec)r
-        import re
-        import sys
-        from pkg_resources import load_entry_point
-
-        if __name__ == '__main__':
-            sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
-            sys.exit(
-                load_entry_point(%(spec)r, %(group)r, %(name)r)()
-            )
-    """).lstrip()
+    if sys.version_info >= (3, 8):
+        template = textwrap.dedent(r"""
+            # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
+            import re
+            import sys
+            from importlib.metadata import distribution
+
+            if __name__ == '__main__':
+                sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+                for entry_point in distribution(%(spec)r).entry_points:
+                    if entry_point.group == %(group)r and entry_point.name == %(name)r:
+                        sys.exit(entry_point.load()())
+        """).lstrip()  # noqa: E501
+    else:
+        template = textwrap.dedent(r"""
+            # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
+            __requires__ = %(spec)r
+            import re
+            import sys
+            from pkg_resources import load_entry_point
+
+            if __name__ == '__main__':
+                sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+                sys.exit(
+                    load_entry_point(%(spec)r, %(group)r, %(name)r)()
+                )
+        """).lstrip()  # noqa: E501
 
     command_spec_class = CommandSpec
 
index 3044cbd098d169c54b6359743d8bd76a2dff1e5c..8611dc166e8f205f4bd118b500f6258bef0ff3d0 100644 (file)
@@ -16,6 +16,7 @@ import io
 import zipfile
 import mock
 import time
+import re
 
 from setuptools.extern import six
 
@@ -71,25 +72,15 @@ class TestEasyInstallTest:
 
     def test_get_script_args(self):
         header = ei.CommandSpec.best().from_environment().as_header()
-        expected = header + DALS(r"""
-            # EASY-INSTALL-ENTRY-SCRIPT: 'spec','console_scripts','name'
-            __requires__ = 'spec'
-            import re
-            import sys
-            from pkg_resources import load_entry_point
-
-            if __name__ == '__main__':
-                sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
-                sys.exit(
-                    load_entry_point('spec', 'console_scripts', 'name')()
-                )
-            """)  # noqa: E501
         dist = FakeDist()
-
         args = next(ei.ScriptWriter.get_args(dist))
         name, script = itertools.islice(args, 2)
-
-        assert script == expected
+        assert script.startswith(header)
+        assert "'spec'" in script
+        assert "'console_scripts'" in script
+        assert "'name'" in script
+        assert re.search(
+            '^# EASY-INSTALL-ENTRY-SCRIPT', script, flags=re.MULTILINE)
 
     def test_no_find_links(self):
         # new option '--no-find-links', that blocks find-links added at
diff --git a/tox.ini b/tox.ini
index aa99e283676b3681719509dcf72ae5b8b4cab6db..d3df21bffd27602f035aa016545a2a8fe899145b 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -8,7 +8,7 @@ minversion = 3.2
 requires =
        tox-pip-version >= 0.0.6
        # workaround for #1998
-       virtualenv < 20
+       virtualenv < 20; python_version=="2.7"
 
 [helpers]
 # Custom pip behavior