Для чего нужна опция buildout:zcml?

В одном из файлов buildout.cfg моего проекта у меня есть что-то вроде этого:

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

Все работает нормально, но я все еще озадачен, почему некоторые пакеты должны быть перечислены здесь, а другие нет.

Какова цель этого для начала?

Проводя некоторые исследования, я попадаю на https://pypi.python.org/pypi/munin.zope/2.1 где говорится, что если вы используете z3c.autoinclude и plone (+3.3), вам это не нужно.

Означает ли это, что если у дистрибутива есть слаг z3c.autoinclude на его setup.py т.е.

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

вам не нужно заботиться о buildout:zcml?

2 ответа

Решение

Не существует встроенной функциональности, связанной с zcml параметр в секции [buildout], кроме удобного места для определения zcml,

Обычно раздел [instance] будет ссылаться на него:

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

Использование buildout:zcml похожий на buildout:eggs это анти-паттерн, ИМО

В конфигурационных файлах buildout, name=value можно использовать двумя способами:

  • указать значение для имени, имеющего предопределенную функциональность
  • присвоить имя значению, чтобы избежать копирования и вставки.

buildout:zcml это пример второго случая.

Другими словами, единственная причина для использования buildout:zcml будет необходимость использовать его значение в разных местах.

Однако, когда мне нужно повторно использовать zcmlЯ скорее определяю это в plone.recipe.zope2instance часть. И повторно использовать это значение в другой части.

Другие вопросы по тегам