On Oct 22, 2009, at 10:43 AM, Tres Seaver wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Martin Aspeli wrote:
Hi,
Is there a way (apart from putting buildout in a virtualenv with --
no-site-
packages) to tell buildout *not* to put site-packages as the first
line in the
mangled sys.path when it generates scripts?
We have people doing horrid things to their global python, and we
need the
buildout to be safe and isolated in these environments.
Using a --no-site-packages virtualenv to drive the buildout is a
pretty
lightweight solution, and easier than the old standby of compiling
your
own Python to get isolation from the global one, whichstill highly
recommended: I build my own Python, and then use a separate
virtualenv
for each project.
The idea behind Gary's branch (http://svn.zope.org/zc.buildout/branches/gary-4-include-site-packages
) is that unlike the --no-site-packages option of virtualenv, which is
all-or-nothing proposition, you would be able to include site-package
locations in Buildout's script generation, but care would be taken
that if distributions are selected from a site-package location to
make sure that when site-package locations are included on sys.path,
those locations don't overshadow any other paths pointing explicitly
to already picked versions of distributions. e.g. If I was using
Apple's System Python on Leopard (10.5), then site-packages includes
zope.interface 3.3.0 and bdist_mpkg 0.4.3. If I wanted to pick
'zope.interface == 3.3.0' and 'bdist_mpkg == 0.4.4', then currently
Buildout could generate a path modification that looks like:
sys.path[0:0] = [
'/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/
lib/python',
'/Users/kteague/buildouts/shared/eggs/bdist_mpkg-0.4.4-py2.5.egg',
]
Where that System path contains bdist_mpkg 0.4.3. The ordering of
whether the site-package location is put before or after version-
specific paths is currently dependant upon the ordering in the
install_requires field (so you get the correct versions importable if
those distributions which are picked from site-packages are listed
after the non-site-package picked versions!) - obviously this is just
a side-effect of the current path manipulation implementation.
One would assume that making this change is fairly easy. Just do a
diff between normal sys.path and the site-package free sys.path when
Python is launched with the -S flag. Which Gary's code does, but the
script generation in Gary's branch right now also accounts for the
fact that *.pth files have been processed, and that you are allowed to
have import statements executed when *.pth files are processed, so he
is generating scripts which also clean sys.modules, and then re-add
site-packages locations with site.addsitedir(location) so that .pth
files are properly re-processed. Which is pretty fancy, and probably
"Does the Right Thing (TM)", but also greatly clutters up the
generated scripts.
I quite like having script generation generate scripts which are still
reasonably compact (I often open generated scripts to see what
Buildout is doing, or sometimes edit them to hand-pick a different egg
if I want to quickly try out a different working set) and I also
wonder how much overhead this additional processing adds (I guess this
depends upon how much you have in site-packages). So perhaps if there
was some option to still generate scripts using the existing style of
script generation - maybe a "i-keep-my-site-packages-clean=true"
option ... i dunno, perhaps the other way 'work-around-site-package-
madness-in-script-generation=true' ... or just merge Buildout and
VirtualEnv into one monolithic project so that you don't need to
install two tools just to be able to use Buildout with a dirty
Python! (rawr!)
Anyways, for those distributions which are tough to install, I think
some people will find this branch quite handy in that they can apt-get
the tough to install distributions, and then safely include those
distributions in working sets composed by Buildout.
_______________________________________________
Distutils-SIG maillist - Distutils-SIG@python.org
http://mail.python.org/mailman/listinfo/distutils-sig