Hi Ian! Am Montag, 14. April 2008 20:37:10 schrieb Ian Bicking:
Hmm... well, does this error only happen when you create a virtualenv from within a virtualenv?
No, absolutely not. It arises whenever python is installed with --exec-prefix != --prefix.
Otherwise, I think there's several things in distutils.sysconfig that need to be adjusted. That module isn't really documented, however, and I suspect there's just a bunch of things that will have to be added to over time, not a good general fix. Or... maybe there's some clever way to fix all these, but I'm not sure.
AFAICS, my patch is quite clean - it just extends virtualenv slightly by handling exec_prefix and prefix separately. This affects the same entrypoints as before (get_python_inc / get_python_lib) and thus promotes to the same changes in higher level functions. Here's how I tested it: import distutils.sysconfig, os for p in range(2): for s in range(2): print distutils.sysconfig.get_python_lib(p, s) print "\nMakefile:", distutils.sysconfig.get_makefile_filename() print " exists:", os.path.exists(distutils.sysconfig.get_makefile_filename()) You can see the results before/after my virtualenv change here: *** Without virtualenv: *** [2] meine@kogspc33:~ -> python test_python_inst.py /software/python-2.4.4/lib/python2.4/site-packages /software/python-2.4.4/lib/python2.4 /software/python-2.4.4/SuSE-10.2/lib/python2.4/site-packages /software/python-2.4.4/SuSE-10.2/lib/python2.4 Makefile: /software/python-2.4.4/SuSE-10.2/lib/python2.4/config/Makefile exists: True *** Trying to create a virtualenv: *** [2] meine@kogspc33:~ -> virtualenv tmp/ve1 New python executable in tmp/ve1/bin/python Installing setuptools.... Complete output from command tmp/ve1/bin/python -c "#!python \"\"\"Bootstrap setuptoo... " /software/python-2.4.4/lib/pyt...4.egg: error: invalid Python installation: unable to open /software/python-2.4.4/lib/python2.4/config/Makefile (No such file or directory) ---------------------------------------- ...Installing setuptools...done. Traceback (most recent call last): File "/software/python-2.4.4/bin/virtualenv", line 7, in ? sys.exit( File "/software/python-2.4.4/lib/python2.4/site-packages/virtualenv-1.0-py2.4.egg/virtualenv.py", line 337, in main create_environment(home_dir, site_packages=not options.no_site_packages, clear=options.clear) File "/software/python-2.4.4/lib/python2.4/site-packages/virtualenv-1.0-py2.4.egg/virtualenv.py", line 536, in create_environment install_setuptools(py_executable) File "/software/python-2.4.4/lib/python2.4/site-packages/virtualenv-1.0-py2.4.egg/virtualenv.py", line 260, in install_setuptools extra_env=env) File "/software/python-2.4.4/lib/python2.4/site-packages/virtualenv-1.0-py2.4.egg/virtualenv.py", line 396, in call_subprocess raise OSError( OSError: Command tmp/ve1/bin/python -c "#!python \"\"\"Bootstrap setuptoo... " /software/python-2.4.4/lib/pyt...4.egg failed with error code 1 *** Unpatched virtualenv: *** As illustrated above, the installation of setuptools failed, but one can use the already-installed python interpreter to run my test program and gets: [2] meine@kogspc33:~ -> tmp/ve1/bin/python test_python_inst.py /home/meine/tmp/ve1/lib/python2.4/site-packages /software/python-2.4.4/lib/python2.4 /home/meine/tmp/ve1/lib/python2.4/site-packages /software/python-2.4.4/lib/python2.4 Makefile: /software/python-2.4.4/lib/python2.4/config/Makefile exists: False This explains why the setuptools installation failed. *** Patched virtualenv with real_exec_prefix *** [2] meine@kogspc33:~ -> . tmp/ve2/bin/activate (ve2)[2] meine@kogspc33:~ -> python test_python_inst.py /home/meine/tmp/ve2/lib/python2.4/site-packages /software/python-2.4.4/lib/python2.4 /home/meine/tmp/ve2/lib/python2.4/site-packages /software/python-2.4.4/SuSE-10.2/lib/python2.4 Makefile: /software/python-2.4.4/SuSE-10.2/lib/python2.4/config/Makefile exists: True I hope I could convince you to include this crucial fix in virtualenv. -- Ciao, / / /--/ / / ANS