[Distutils] Install a script to <prefix>/sbin instead of <prefix>/bin

Michael Jansen info at michael-jansen.biz
Thu Dec 5 18:37:39 CET 2013


On Tuesday, December 03, 2013 12:33:22 PM Michael Jansen wrote:
> > Changes to distutils itself are fairly pointless, since the earliest
> > possible date for publication of any such changes is now as part of
> > Python 3.5 in 2015. The sheer impracticality of that approach when
> > plenty of people are still running Python 2.6 is why we're going
> > through the somewhat painful exercise of decoupling the preferred
> > build system from the standard library :)
> > 
> > So, at this point, the appropriate place to make such a change is in
> > setuptools: https://bitbucket.org/pypa/setuptools
> > 
> > That will allow it to be made in a way that supports Python 2.6+,
> > whereas a distutils change won't really help anyone.
> 
> A point well made :) . Will do that.

I made a proof of concept implementation (not ready to be merged) here

https://bitbucket.org/jansenm/setuptools/commits/all

I did fight a bit with mercurial (we had severe philosophical disagreements) so i hope it works.

There is a new test that checks that everything works for the distutils syntax. and then one that 
tests the improvements. I implemented the flexible idea.

                scripts = [
                    'bin/bin_script',
                    'sbin/sbin_script',
                    ['sbin', ['sbin/sbin_script']],
                    ['bin', ['bin/bin_script2']],
                    ['srv/www/myprefix', ['bin/mymod.wsgi']]

The test is run with

$ python setup.py test --test-module setuptools.tests.test_install_scripts; 

and currently prints out the directory it used for testing and does not remove it so its possible to 
inspect the result.

test_distutils_compatibility (...) ... ###### /tmp/tmpPMKJNk

I btw. noticed that numpy overloads build_scripts itself to handle functions instead of strings. Not 
sure if my patch will break that.

Open:

Where to put the scripts in step build_scripts? For now it does this for maximum backwards 
compatibility.

/tmp/tmp5ov6qb/src/build/scripts-2.7
/tmp/tmp5ov6qb/src/build/scripts-2.7/bin_script
/tmp/tmp5ov6qb/src/build/scripts-2.7/sbin_script
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7/sbin
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7/sbin/sbin_script
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7/bin
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7/bin/bin_script2
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7/srv
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7/srv/www
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7/srv/www/myprefix
/tmp/tmp5ov6qb/src/build/setuptools-scripts-2.7/srv/www/myprefix/mymod.wsgi

I had to use the install_data directory to install the scripts into with copy_tree in install_scripts 
because my preferred solution install_base is not rerooted by distutils (when --root is given to 
setup.py).

There is currently no build-setuptools-scripts parameter for python setup.py build. We would have 
to add that. Same for build_scripts. it would be build-setuptools-dir there.

Documentation is missing too. As i said only a proof of concept for now.







 



> 
> Mike

-- 
Michael Jansen
http://michael-jansen.biz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/distutils-sig/attachments/20131205/441c5312/attachment-0001.html>


More information about the Distutils-SIG mailing list