构建一个部件层次结构的Buildout食谱

4 投票
3 回答
680 浏览
提问于 2025-04-15 12:56

有没有一个Python的buildout配方,可以实现以下功能:

[buildout]
parts = group-of-parts

[group-of-parts]
recipe = what.can.i.use.for.this
parts = part-1 part-2

[part-1]
...

[part-2]
...

换句话说,我想要一个配方,它可以像'buildout'部分那样接受一个'parts'属性,这样我就可以手动管理一组部件的层级关系。

是的,我知道我可以这样做:

[buildout]
parts = group-of-parts

[group-of-parts]
recipe =
parts = ${part-1:recipe} ${part-2:recipe}

[part-1]
...

[part-2]
...

但是依赖于通过引用它们的某个属性来构建这些部件,感觉有点不太明确。我更希望能有一个更直接的配方,允许我直接列出部件的名称。

当然,在扩展和重写时,直接说:

[groups-of-parts]
parts -= part-2

看起来要比:

[groups-of-parts]
parts -= ${part-2:recipe}

要干净很多。

或者我的问题是,我对buildout的工作原理缺乏基本的理解,或者我在文档中忽略了什么,使得这个过程变得更简单。

而且我不想要一个扁平的层级结构,把所有部件都列在'buildout'部分的'parts'属性里。

3 个回答

0

你可以这样做:

[buildout]
development-tools-parts =
    thing1
    thing2
software-parts =
    thing3
    thing4
parts =
    ${buildout:development-tools-parts}
    ${buildout:software-parts}

我理解得对吗?

之所以能这样做,是因为大部分的构建配置语句其实就是一些列表。你可以把这些列表一个接一个地添加在一起。

我有时候会用这个方法来创建一个基本的构建配置文件(“base.cfg”),然后在这个基础上进行扩展。这样你就可以得到一个 ${buildout:common-parts},然后把它加到你的部分列表里,这样就能把一些标准的项目放进去。给你举个例子。

0

不久前,我写了一篇关于在buildout中解决依赖关系的文章。虽然这并不是你问题的答案,因为我觉得你想要的东西并没有太大意义。但你可能会对buildout使用的依赖关系层级树的解决方法有一些了解。

1

不,没有什么等级关系,当然你可以自己制定一个规则来管理它。

你为什么想要这个呢?其实你不会有成百上千个零件,所以管理起来并不难……

撰写回答