[Distutils] setuptools and ordering...

Phillip J. Eby pje at telecommunity.com
Thu Mar 2 05:50:43 CET 2006

At 06:19 PM 2/25/2006 +0200, Iwan Vosloo wrote:
>Or, I'd have to write code that builds the dependency tree (of
>Distributions) and then flatten it into a list that would make
>sense. And THEN search for entry points in that order.  I don't
>suppose something like this exists?

Not really.  I'd probably do something like:

def flatten(dists, ws=pkg_resources.working_set, memo=None):
     if memo is None:
         memo = {}
     for dist in dists:
         if dist in memo:
         memo[dist] = True
         predecessors = ws.resolve(dist.as_requirement())
         for d in flatten(predecessors, ws, memo):
             yield d
         yield dist

Calling "flatten(working_set)" would then yield every distribution (at most 
once) in an ordering guaranteed to have dependency targets before the 
distributions that depend on them.

Once you've got the distributions in that order, you can then do as you 
wish with their entry points.

More information about the Distutils-SIG mailing list