On 2009-09-02, Jim Fulton
Note that, as Tarek reminded us, buildout lets you define entry points yourself. In fact, I happen to have done this for pyflakes myself a couple of weeks ago:
[pyflakes] recipe = zc.recipe.egg eggs = pyflakes entry-points = pyflakes=pyflakes.scripts.pyflakes:main
That's much shorter than the one I've been using, which makes it seem less painful. Due to the way the docutils scripts are set up (without a clear 'main()' method), this is much more painful.
- Fix up buildout to also support scripts=[]. (I'm trying that one right now).
For a long time, I maintained that this wasn't practical. I do think 90% (maybe a 100%) solution of possible. It will require generating scripts that set up the path and then include the source of the original scripts. This is rather ugly but probably doable. Of course, there's also the pain that the script meta data isn't available cleanly, as you point out below.
I went from "probably an easy fix" to "ouch, distutils/setuptools makes this impossible without resorting to ugly hacks" within one day...
- How do I access that 'scripts=[....]' which is sitting right there in my setup() call? From buildout? Buildout does something like:
req = pkg_resources.Requirement.parse('my.package') dist = working_set.find('my.package')
dist ends up as a pkg_resources.Distribution class, which doesn't seem to have anything with which to do "dist.scripts" or so. Anyone know the magic call? In easy_install there's a "self.distribution.scripts", but after 4 levels of inheritance and a monkey patch I lost track where self.distribution comes from...
Yeah, it's too bad that the meta data is lost. It amazes me how willing distutils and setuptools are to toss meta data passed to setup.
You could probably invoke the install command telling it to install the scripts in some place and then grab them, but that sounds nasty too.
And it is especially nasty as you'd have to do it for every egg in order to discover whether they *have* a 'scripts=[...]'. Unless you'd specify it. What about making the problem explicit and doing something like: [distutilscripts] recipe = zc.recipe.egg:distutils eggs = pyflakes docutils scripts = scripts/pyflakes tools/rst2html tools/rst2s5 Reinout -- Reinout van Rees - reinout@vanrees.org - http://reinout.vanrees.org Software developer at http://www.thehealthagency.com "Military engineers build missiles. Civil engineers build targets"