Конфликт конфигурации ZCML между Zope2 и другим пакетом zope.*
У меня есть надстройка Plone со следующим setup.py
setup(
...
install_requires=[
...
'zope.i18n',
...
'Zope2',
],
...
)
Если я бегу bin/instance
Я получаю следующую трассировку:
File ".buildout/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 1527, in resolveConflicts
raise ConfigurationConflictError(conflicts)
zope.configuration.config.ConfigurationConflictError: Conflicting configuration actions
For: ('utility', <InterfaceClass zope.i18n.interfaces.INegotiator>, '')
File ".buildout/eggs/zope.i18n-3.7.4-py2.7.egg/zope/i18n/configure.zcml", line 3.2-6.8
<utility
provides="zope.i18n.interfaces.INegotiator"
component="zope.i18n.negotiator.negotiator"
/>
File ".buildout/eggs/Zope2-2.13.22-py2.7.egg/ZPublisher/i18n.zcml", line 5.2-8.8
<utility
provides="zope.i18n.interfaces.INegotiator"
component="zope.i18n.negotiator.negotiator"
/>
Если я закомментирую zope.i18n
от setup.py
, запустите buildout снова, затем экземпляр запустится нормально.
Удивительно, но оба bin/instance
файлы (до и после удаления zope.i18n
) точно так же.
Так что я вроде ничего не понимаю о том, что неправильно определять что-то на setup.py
что в любом случае выбирается та же версия...
Последнее замечание о распространении configure.zcml
У меня есть эта строка:
<includeDependencies package="." />
Имеет ли это значение вообще?
1 ответ
Это кажется странным? очевидно, невозможно зарегистрировать дважды одну и ту же утилиту, но оба пакета делают? Я очень смущен этим. Обычно вам не нужны <includeDependencies package="." />
части, так как все компоненты должны быть загружены точкой входа Plone z3c.autoinclude
, Я предполагаю, что в среде plone по умолчанию один из компонентов не будет загружен.
Я зарегистрировался на Plone 4.3.6... Переговорщик zope.i18n используется.
Так что мой лучший выбор в том, что ваш <includeDependencies package="." />
также загружает файл configure.zcml Zope2, чего не должно быть.
Удаление <includeDependencies package="." />
, может решить вашу проблему.