On May 29, 2005, at 3:46 PM, Phillip J. Eby wrote:
At 03:56 PM 5/29/2005 -0500, Ian Bicking wrote:
I'm wondering how scripts should be handled by easyinstall -- right now they pretty much get ignored. But I'm not sure how they should be handled at all. Distutils has a couple rules, with --install- scripts, and --home (which uses ~/bin), and the normal rules... and then some translation of those options to Windows. But none of those seems to translate very well to easyinstall. Or eggs.
I don't have any ideas myself on this. Except that the scripts themselves are usually pretty dumb anyway, just thin wrappers that fix up sys.path, import a module, and call a function; so the status quo could probably be improved upon anyway.
Yep. Like you, however, I'm not sure what to do about 'em. Take a look at the Unix versions of easy_install -- they're actually the regular .egg files, with a shell script cat'ted on at the front! (Somebody could probably pull the same trick with an .exe on Windows.)
However, such "eggsecutables" aren't really a solution for packages with multiple scripts. I'm thinking maybe bdist_egg should include an EGG-SCRIPTS directory for the scripts, so that EasyInstall could pull them out and install them whenever you do a non --multi-version install. It would, however, also need to *uninstall* them when deactivating a current version, because otherwise they'd be for the wrong version.
I had previously thought that we would move towards using "python - m" to run scripts in eggs; unfortunately this only works for unpacked eggs, not egg files.
Of course, this all just overlaps the fact that distutils script installation is really only good for command-line utilities anyway, and even for those, Windows requires a fair bit of tweaking in order to be able to use them effectively at a non-Cygwin command line.
It might help if there were some kind of metadata for scripts, like to indicate whether something is a command-line utility, a graphical application, etc. Then distutils could tweak the file extension and/or build a custom launcher for it (like Fredrik Lundh's exemaker for Windows) as appropriate for the platform. That information could then be added to EGG-INFO and/or EGG-SCRIPTS, and used by EasyInstall to do script installation and uninstallation.
Couldn't you change build_scripts and install_scripts when using bdist_egg to instead put the script inside the egg somewhere, and the installer would put scripts in the usual places that simply require and then exec the real script? -bob