[Distutils] Buildout 2 and system packages
ralf at systemexit.de
Fri Feb 22 23:29:34 CET 2013
Lele Gaifax <lele at metapensiero.it> writes:
> Jim Fulton <jim at zope.com> writes:
>> The problem is that site-packages doesn't have a predictable
>> location, as demonstrated by the example given in this thread. On
>> some systems, there are multiple directories containing custom
> Sorry to insist (being dumb :), but couldn't buildout, that should know
> the list of explicitly requested distributions, sort the paths giving
> precedence to them?
The following uses working_set.resolve to do that. I may miss some
details here, but it looks like this can be done in a sane way...
diff --git a/src/zc/buildout/easy_install.py b/src/zc/buildout/easy_install.py
index 75f7047..48acda0 100644
@@ -889,7 +889,14 @@ def scripts(reqs, working_set, executable, dest=None,
assert executable == sys.executable, (executable, sys.executable)
- path = [dist.location for dist in working_set]
+ if isinstance(reqs, str):
+ raise TypeError('Expected iterable of requirements or entry points,'
+ ' got string.')
+ parsed_requirements = [pkg_resources.Requirement.parse(req) for req in reqs if isinstance(req, str)]
+ path = [dist.location for dist in working_set.resolve(parsed_requirements)]
+ path.extend([dist.location for dist in working_set])
# order preserving unique
unique_path = 
@@ -900,9 +907,6 @@ def scripts(reqs, working_set, executable, dest=None,
generated = 
- if isinstance(reqs, str):
- raise TypeError('Expected iterable of requirements or entry points,'
- ' got string.')
initialization = '\n'+initialization+'\n'
More information about the Distutils-SIG