Zope2和另一个zope。*包之间的ZCML配置冲突

时间:2015-08-26 10:33:30

标签: plone setuptools zope buildout zcml

我有一个带有以下setup.py

的Plone插件
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 个答案:

答案 0 :(得分:3)

那好像很奇怪?显然,它不可能两次注册相同的实用程序,但两个包都这样做?我对此非常困惑。通常您不需要<includeDependencies package="." />部分,因为所有组件都应该由z3c.autoinclude的plone入口点加载。我假设在默认的plone环境中,不会加载其中一个组件。

我检查了Plone 4.3.6 ......使用了zope.i18n的谈判者。

所以我最好的选择是,你的<includeDependencies package="." />也会加载Zope2的configure.zcml,这不应该发生。

删除<includeDependencies package="." />可能会解决您的问题。