From 15ad80b4a67f22387c1ca676aac9a2a8807ba14d Mon Sep 17 00:00:00 2001 From: Roman Evstifeev Date: Tue, 1 Nov 2016 00:42:15 +0300 Subject: [PATCH] Use fastentrypoints.py as workaround for slow start. See https://github.com/pypa/setuptools/issues/510 Addresses #23 --- MANIFEST.in | 1 + fastentrypoints.py | 42 ++++++++++++++++++++++++++++++++++++++++++ setup.py | 5 +++++ 3 files changed, 48 insertions(+) create mode 100644 fastentrypoints.py diff --git a/MANIFEST.in b/MANIFEST.in index 3a672ce..9e6530d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,4 +4,5 @@ global-include *.txt include LICENSE include README.md include tox.ini +include fastentrypoints.py recursive-include doc * diff --git a/fastentrypoints.py b/fastentrypoints.py new file mode 100644 index 0000000..e2dbfe7 --- /dev/null +++ b/fastentrypoints.py @@ -0,0 +1,42 @@ +''' +Monkey patch setuptools to write faster console_scripts with this format: + + from mymodule import entry_function + entry_function() + +This is better. +''' +from setuptools.command import easy_install + + +@classmethod +def get_args(cls, dist, header=None): + """ + Yield write_script() argument tuples for a distribution's + console_scripts and gui_scripts entry points. + """ + template = 'import sys\nfrom {0} import {1}\nsys.exit({1}())' + if header is None: + header = cls.get_header() + spec = str(dist.as_requirement()) + for type_ in 'console', 'gui': + group = type_ + '_scripts' + for name, ep in dist.get_entry_map(group).items(): + cls._ensure_safe_name(name) + script_text = template.format( + ep.module_name, ep.attrs[0]) + args = cls._get_script_args(type_, name, header, script_text) + for res in args: + yield res + + +easy_install.ScriptWriter.get_args = get_args + + +def main(): + import shutil + import sys + dests = sys.argv[1:] if sys.argv[1:] else ['.'] + print(__name__) + for dst in dests: + shutil.copy(__file__, dst) diff --git a/setup.py b/setup.py index f154cb9..40f4b20 100644 --- a/setup.py +++ b/setup.py @@ -3,6 +3,11 @@ from os.path import join, dirname import dpm + +# Workaround for slow entry points https://github.com/pypa/setuptools/issues/510 +# Taken from https://github.com/ninjaaron/fast-entry_points +import fastentrypoints + from setuptools import setup, find_packages