4

我有一个带有以下 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="." />

这有关系吗?

4

1 回答 1

3

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

我在 Plone 4.3.6 上签到...使用了 zope.i18n 的协商器。

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

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

于 2015-08-26T12:09:56.343 回答