你怎么知道哪个python egg在buildout中强制执行约束?

Ada*_*rey 7 python buildout

例如,以下内容是使用 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
Run Code Online (Sandbox Code Playgroud)

约束five.localsitemanager>2.0dev似乎并没有被grokcore.annotation强制执行(见https://github.com/zopefoundation/grokcore.annotation/blob/master/setup.py),但我怎么找出鸡蛋实际执行呢?

Hey*_*yl1 6

我知道这是一个非常古老的问题,但昨天我遇到了同样的问题,我的同事找到了解决问题的方法.所以我想我也可以在这里发布.

您的所有buildout鸡蛋都在eggs项目的文件夹中或.buildout主文件夹的文件夹中,包括开发蛋.在每个鸡蛋中,你会找到一个requires.txt符合鸡蛋要求的文件.这意味着您可以.buildout/eggs对特定约束的文件夹执行查找/ grep,以找出正在执行它的包.

所以在你的情况下,我建议你去egg目录(在我的情况下~/.buildout/eggs),然后做:

find .|grep requires.txt|xargs grep 2.0dev
Run Code Online (Sandbox Code Playgroud)

那应该找到强制执行约束的蛋.

在我的情况下,我升级到Django 1.7并且有一个包含约束的包'Django >= 1.4, < 1.7'.所以执行find .|grep requires.txt|xargs grep 1.7发现有问题的鸡蛋.