在buildout.cfg中指定优先级以获取egg

时间:2011-02-01 22:30:35

标签: python buildout

我想知道是否有办法在查看pypi.python.org /

之前指定鸡蛋应该从哪里取出

例如:

[buildout]
find-links:
    /home/eggs/

eggs =
    foo
    bar

如果pypi上的foobar个软件包的版本号高于我foo中名为/home/eggs/的软件包,则buildout会尝试下载该软件包来自pypi而不是。我的foo和pypi foo完全不同,这是一个问题。

我找不到使用命名空间或类似方法的方法,所以我想应该有办法强制buildout使用某些包而不是其他包。

知道如何解决这个问题吗?

干杯, 马丁

1 个答案:

答案 0 :(得分:4)

您应该将鸡蛋固定到特定版本,这样您就可以控制每次运行构建时使用的鸡蛋:

[buildout]
versions = versions

[versions]
foo = 1.0
bar = 1.1
spam = 1.0b2

versions部分中的[buildout]选项可让您为包含版本引脚的部分命名。在这个例子中,我将该部分命名为[versions],但您可以使用您喜欢的任何名称;想象一下,如果你要[release1][release2]部分,versions选项指向其中任何一个选择版本引脚的特定组合。

当鸡蛋被固定到这样的特定版本时,只有那个版本的鸡蛋才能满足这个构建的要求。如果您的find-links指向包含该版本的位置,那么将从那里下载egg,而不是从PyPI下载。

还有2个可用于管理版本引脚的构建功能。第一个是名为allow-picked-versions的默认构建选项:

[buildout]
allow-picked-versions = false

默认设置为true,这意味着buildout可以为您选择一个满足所有要求的版本。当您将其设置为false时,对于没有版本的任何鸡蛋,pin buildout会抛出错误。用这个来检测你是否需要确定鸡蛋。

另一种选择是使用buildout.dumppickedversions扩展来构建:

[buildout]
extensions = buildout.dumppickedversions

当你像这样添加到你的buildout时,每次你运行你的buildout时,最后都会列出一个已挑选版本的列表,对于任何没有固定的egg,都会以一种直接适合你的buildout配置的格式。这样你就可以让buildout找出要使用的蛋,然后将它们固定到那些版本。