[Distutils] setuptools and site.py

Ian Bicking ianb at colorstudy.com
Wed Apr 19 23:18:16 CEST 2006

I'm trying to resolve a few issues in working-env.py 
(http://svn.colorstudy.com/home/ianb/working-env.py) and I'm running 
into some conflicts with setuptools.

working-env.py basically works by creating another site.py, which 
doesn't add site-packages and other directories that I don't care for. 
Without setuptools this works pretty well.  But because of changes in 
setuptools, added right around the time I wrote working-env.py, 
setuptools now wants to write its own site.py and doesn't like mine.

One option is to integrate setuptools' changes into my own customized 
site.py, and then add __boot to the top to fake setuptools out.  I think 
that would be bothersome.

Another option would be if setuptools looked for something ahead of 
site.  Like, say, siteoverride.  Then I could put my siteoverride in 
place instead of site.py, let setuptools have site.py, and avoid the 
system site.py entirely.

Also, and this is related to a request Jim made a while ago, I'm 
monkeypatching setuptools currently to change the way it creates 
scripts, and it would be nice if this wasn't necessary.  Or was easier. 
  The monkeypatch is basically changing the script generated so that it 
sets sys.path before importing site.

Here's what I'm doing (in setuptools/__init__):

import setuptools.command.easy_install as easy_install

def get_script_header(script_text, executable=easy_install.sys_executable):
     from distutils.command.build_scripts import first_line_re
     first, rest = (script_text+'\n').split('\n',1)
     match = first_line_re.match(first)
     options = ''
     if match:
         script_text = rest
         options = match.group(1) or ''
         if options:
             options = ' '+options
     if options.find('-S') == -1:
         options += ' -S'
     shbang = "#!%(executable)s%(options)s\n" % locals()
     shbang += ("import sys, os\n"
                "join, dirname = os.path.join, os.path.dirname\n"
                "lib_dir = join(dirname(dirname(__file__)), 'lib', 
'python%s.%s' % tuple(sys.version_info[:2]))\n"
                "sys.path.insert(0, lib_dir)\n"
                "import site\n")
     return shbang

easy_install.get_script_header = get_script_header

Ian Bicking  /  ianb at colorstudy.com  /  http://blog.ianbicking.org

More information about the Distutils-SIG mailing list