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