On 28 February 2013 20:53, Daniel Holth <[email protected]> wrote:
>> Sorry, I wasn't clear. I know about that, but I don't know how to set
>> up a site directory *before* starting the Python process. Thinking
>> about it, I guess I could do the addsitedir thing and then execfile
>> setup.py. Put all of that into a -c script. That's probably OK, just a
>> bit messy. Particularly as execfile is no longer a builtin.
>
> It is messy but you will probably wind up doing what pip does in
> several places, for example:
>
> python -c "import setuptools; __file__=%r;
> exec(compile(open(__file__).read().replace('\\r\\n', '\\n'), __file__,
> 'exec'))" % self.setup_py
setup_dir, setup = os.path.split(setup_py)
args = [self.python, setup, 'install']
for loc in locations:
args.append('--install-' + loc + '=' + paths[loc])
if setuptools:
script = """\
import sys
import site
here, setup = sys.argv[1:3]
del sys.argv[1:3]
site.addsitedir(here, known_paths=None)
sys.path.append(here)
__file__ = setup
if sys.version_info[0] < 3:
execfile(setup)
else:
import tokenize
with open(setup, 'rb') as fp:
encoding, lines = tokenize.detect_encoding(fp.readline)
with open(setup, 'r', encoding=encoding) as fp:
exec(compile(fp.read(), setup, 'exec'))
"""
args[1:1] = ['-c', script, here]
args.append('--single-version-externally-managed')
args.append('--record=' + os.path.join(paths['prefix'], 'RECORD'))
subprocess.check_call(args, cwd=setup_dir)
> Why not just reserve a separate virtualenv for building?
Because (a) I want to run this on machines without virtualenv
available, and (b) I'd need multiple virtualenvs, for Pythons 2.6,
2.7, 3.2 and 3.3. Bootstrapping issues, basically.
Paul
_______________________________________________
Distutils-SIG maillist - [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig