[Distutils] [buidout] ignoring site-packages

Martijn Faassen faassen at startifact.com
Mon Sep 14 16:28:42 CEST 2009


Hi there,

A long-standing issue with using buildout is that even though it creates 
a restricted environment, it still uses the site-packages of the system 
python and there's no way to get rid of it. This is why for instance the 
Grok project tells people to create their buildouts within a "virtualenv 
--no-site-packages" virtual env. Because if we don't, a lot of people 
(especially all Mac OS X users that don't create their own python) will 
have a failing buildout due to conflicting libraries.

The following code snippet could be added to the buildout-generated 
scripts, after the 'sys.path[:]' assignment:

import site
packages = set(sys.path)
site_packages = set()
site.addsitepackages(site_packages)
packages = packages.difference(site_packages)
sys.path = list(packages)

This cleans all site packages out of sys.path before any further code is 
executed.

How to make sure we run without site packages? We could of course add an 
option to buildout when it's run:

$ bin/buildout --no-site-packages

Unfortunately this would mean all buildout users would need to remember 
this. It therefore seems sensible to me to also add one to buildout.cfg:

[buildout]
no-site-packages = true

What do people think?

See also this bug:

https://bugs.launchpad.net/zc.buildout/+bug/429383

Regards,

Martijn



More information about the Distutils-SIG mailing list