Commit 01121d05 authored by Ofek Lev's avatar Ofek Lev

Decrease start-up time of editable-installed entry points on newer versions of Python

parent 74de4e98
Editable-installed entry points now load significantly faster on Python versions 3.8+.
...@@ -2070,6 +2070,23 @@ class ScriptWriter: ...@@ -2070,6 +2070,23 @@ class ScriptWriter:
gui apps. gui apps.
""" """
try:
from importlib.metadata import distribution # noqa: F401
template = textwrap.dedent(r"""
# EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
__requires__ = %(spec)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
except ImportError:
template = textwrap.dedent(r""" template = textwrap.dedent(r"""
# EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r # EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r
__requires__ = %(spec)r __requires__ = %(spec)r
...@@ -2082,7 +2099,7 @@ class ScriptWriter: ...@@ -2082,7 +2099,7 @@ class ScriptWriter:
sys.exit( sys.exit(
load_entry_point(%(spec)r, %(group)r, %(name)r)() load_entry_point(%(spec)r, %(group)r, %(name)r)()
) )
""").lstrip() """).lstrip() # noqa: E501
command_spec_class = CommandSpec command_spec_class = CommandSpec
......
...@@ -71,6 +71,23 @@ class TestEasyInstallTest: ...@@ -71,6 +71,23 @@ class TestEasyInstallTest:
def test_get_script_args(self): def test_get_script_args(self):
header = ei.CommandSpec.best().from_environment().as_header() header = ei.CommandSpec.best().from_environment().as_header()
try:
from importlib.metadata import distribution # noqa: F401
expected = header + DALS(r"""
# EASY-INSTALL-ENTRY-SCRIPT: 'spec','console_scripts','name'
__requires__ = 'spec'
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').entry_points:
if entry_point.group == 'console_scripts' and entry_point.name == 'name':
sys.exit(entry_point.load()())
""") # noqa: E501
except ImportError:
expected = header + DALS(r""" expected = header + DALS(r"""
# EASY-INSTALL-ENTRY-SCRIPT: 'spec','console_scripts','name' # EASY-INSTALL-ENTRY-SCRIPT: 'spec','console_scripts','name'
__requires__ = 'spec' __requires__ = 'spec'
...@@ -84,6 +101,7 @@ class TestEasyInstallTest: ...@@ -84,6 +101,7 @@ class TestEasyInstallTest:
load_entry_point('spec', 'console_scripts', 'name')() load_entry_point('spec', 'console_scripts', 'name')()
) )
""") # noqa: E501 """) # noqa: E501
dist = FakeDist() dist = FakeDist()
args = next(ei.ScriptWriter.get_args(dist)) args = next(ei.ScriptWriter.get_args(dist))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment