buildout:zcml 选项有什么用?

What's the buildout:zcml option for?

在我的一个项目的 buildout.cfg 文件中,我有这样的东西:

[buildout]
...
zcml =
    my.package
    plone.reload
...

一切正常,但我仍然对某些软件包确实需要在此处列出而其他软件包不需要的原因感到困惑。

开头的目的是什么?

在做一些研究时,我最终发现 https://pypi.python.org/pypi/munin.zope/2.1,它说 如果你使用 z3c.autoinclude 和 plone (+3.3),你不需要它.

这是否意味着如果一个发行版在其 setup.py 上有 z3c.autoinclude slug,即

entry_points="""
# -*- Entry points: -*-
[z3c.autoinclude.plugin]
target = plone
""",

不用关心buildout:zcml?

没有与 [buildout] 部分中的 zcml 参数相关的固有功能,除了方便定义 zcml 的地方。

通常 [instance] 部分会引用它:

[instance]
recipe = plone.recipe.zope2instance
eggs = Plone
zcml = ${buildout:zcml}

The use of buildout:zcml similar to buildout:eggs is an anti-pattern, IMO

在buildout配置文件中,name=value有两种使用方式:

  • 为具有预定义功能的名称指定值
  • 为值指定名称以避免复制和粘贴。

buildout:zcml是第二种情况的例子。

换句话说,使用 buildout:zcml 的唯一原因是需要在不同的地方使用它的值。

然而,当我需要重用 zcml 时,我宁愿在 plone.recipe.zope2instance 部分定义它。并在另一部分重用该值。