我有一个带有以下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="." />
这有关系吗?
答案 0 :(得分:3)
那好像很奇怪?显然,它不可能两次注册相同的实用程序,但两个包都这样做?我对此非常困惑。通常您不需要<includeDependencies package="." />
部分,因为所有组件都应该由z3c.autoinclude
的plone入口点加载。我假设在默认的plone环境中,不会加载其中一个组件。
我检查了Plone 4.3.6 ......使用了zope.i18n的谈判者。
所以我最好的选择是,你的<includeDependencies package="." />
也会加载Zope2的configure.zcml,这不应该发生。
删除<includeDependencies package="." />
可能会解决您的问题。