[Distutils] setuptools: mishandles install of non-python scripts
Ned Deily
nad at acm.org
Sat Jun 10 02:22:15 CEST 2006
easy_install doesn't properly handle non-python scripts in a
distribution.
The problem shows up when using easy_install to install mercurial:
<http://cheeseshop.python.org/pypi/Mercurial/>
The mercurial distribution includes two scripts, one a python script,
the other a shell script:
hg - #!/usr/bin/env python
hgmerge - #!/bin/sh
Using easy_install, both scripts get installed with a python wrapper
script. Execution of hgmerge fails when the wrapper tries to run the
shell script under python:
$ hgmerge
Traceback (most recent call last):
File "/usr/local/python/bin/hgmerge", line 5, in ?
pkg_resources.run_script('mercurial==dbeaa4369121', 'hgmerge')
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-pac
kages/setuptools-0.6b3-py2.4.egg/pkg_resources.py", line 407, in
run_script
self.require(requires)[0].run_script(script_name, ns)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-pac
kages/setuptools-0.6b3-py2.4.egg/pkg_resources.py", line 1084, in
run_script
execfile(script_filename, namespace, namespace)
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-pac
kages/mercurial-dbeaa4369121-py2.4-macosx-10.4-fat.egg/EGG-INFO/scripts/h
gmerge", line 20
if [ -z "$EDITOR" ]; then
^
SyntaxError: invalid syntax
If mercurial is installed using distutils directly;
python setup.py install
both scripts work properly.
In build_scripts.py in distutils.command, distuitils uses the results of
first_line_re to decide whether to adjust the python value in the shbang
line of the script: if no "python" is found, distutils installs the
script without modification. easy_install.py uses the first_line_re
test from distutils but seems to unconditionally add a wrapper to the
script during installation regardless of the script's type.
--
Ned Deily,
nad at acm.org
More information about the Distutils-SIG
mailing list