how do you know which python egg is enforcing a constraint in buildout?

271 views Asked by At

For instance the following is built with bin/buildout -Nvv

...
Getting required 'grokcore.component>=2.5'
  required by five.grok 1.3.2.
  required by grokcore.viewlet 1.11.
Picked: grokcore.component = 2.5
Getting required 'grokcore.annotation'
  required by five.grok 1.3.2.
Picked: grokcore.annotation = 1.3
The constraint, 0.4, is not consistent with the requirement, 'five.localsitemanager>2.0dev'.
While:
  Installing instance.
Error: Bad constraint 0.4 five.localsitemanager>2.0dev

The constraint five.localsitemanager>2.0dev does not seem to be enforced by grokcore.annotation (see https://github.com/zopefoundation/grokcore.annotation/blob/master/setup.py) But how do I find out which egg is actually enforcing this?

1

There are 1 answers

4
Heyl1 On

I know this is a very old question, but I had the same problem yesterday and my colleague found a way to solve the problem. So I thought I might as well post it here.

All your buildout eggs are either in an eggs folder in your project or in a .buildout folder in your home folder, including development eggs. In each egg you'll find a requires.txt file with the requirements for the egg. This means you can do a find/grep on the .buildout/eggs folder for the specific constraint to find out which package is enforcing it.

So in your case I would suggest you go to the eggs directory (in my case ~/.buildout/eggs) and then do:

find .|grep requires.txt|xargs grep 2.0dev

That should find the egg that's enforcing the constraint.

In my case I was upgrading to Django 1.7 and there was one package with the constraint 'Django >= 1.4, < 1.7'. So executing find .|grep requires.txt|xargs grep 1.7 found the problematic egg.