Для чего нужна опция 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
часть. И повторно использовать это значение в другой части.