我想知道是否有一种方法可以指定在查看pypi.python.org/之前应该从何处获取鸡蛋。

例如 :

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

eggs =
    foo
    bar


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

我找不到使用命名空间或类似名称的方法,因此我想应该有一种方法可以强制构建使用某些软件包而不是其他软件包。

任何想法如何解决这个问题?

干杯,
马丁

最佳答案

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

[buildout]
versions = versions

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


versions部分中的[buildout]选项使您可以命名一个部分,其中包含软件包的版本引脚。在此示例中,我将该部分命名为[versions],但是您可以使用任何喜欢的名称;假设您将要创建[release1][release2]部分,而versions选项指向任意一个以选择特定版本的引脚组合。

当将鸡蛋固定到这样的特定版本时,只有该鸡蛋版本可以满足此扩展的要求。如果您的查找链接指向包含该版本的位置,那么将从那里而不是从PyPI下载鸡蛋。

还有2个附加功能可以帮助管理版本引脚。第一个是称为allow-picked-versions的默认构建选项:

[buildout]
allow-picked-versions = false


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

另一种选择是使用buildout.dumppickedversions扩展名进行扩展:

[buildout]
extensions = buildout.dumppickedversions


像这样添加到扩展中后,每次运行扩展时,最后都会列出选择版本的列表,对于任何未固定的鸡蛋,其格式都适合于包含在扩展配置中。这样,您可以让buildout找出要使用的鸡蛋,然后将其固定到那些版本。

09-07 07:52