collective.monkeypatch无法检测Zope版本(z3c.form)

时间:2011-03-24 10:28:58

标签: plone zope z3c.form

在我们的一些服务器上,collective.monkeypatch不起作用:

    Unable to detect Zope version. Please make sure you have Zope 2.10.4 or newer installed.
    2011-03-24 10:17:13 ERROR collective.monkeypatcher Could not patch because version not recognized. Wanted: [2, 13, 9], Installed: []
    2011-03-24 10:17:13 INFO collective.monkeypatcher Preconditions for patching scope <class 'z3c.form.form.BaseForm'> not met (Zope2-=2.13.999)!
    2011-03-24 10:17:13 ERROR collective.monkeypatcher Could not patch because version not recognized. Wanted: [2, 13, 9], Installed: []
    2011-03-24 10:17:13 INFO collective.monkeypatcher Preconditions for patching scope <class 'z3c.form.group.GroupForm'> not met (Zope2-=2.13.999)!

我们已尝试在不同的计算机上进行一些扩建,并且无法提供可靠的模式,为什么它会失败(可能是鸡蛋和版本pindown相关)

可能是什么问题以及如何

2 个答案:

答案 0 :(得分:2)

Unable to detect Zope version. Please make sure you have Zope 2.10.4 or newer installed.来自较旧的Plone版本(版本3.0及更早版本,已在3.1行中删除)。它使用旧式App.version_txt.getZopeVersion API从Zope2模块目录中读取version.txt文件,但并不总是这样写。在任何情况下,我都没有在安装了plone.recipe.zope2install配方的Zope2安装中看到它。如果您使用Zope 2.10.4或更新版本,则此日志消息是无害的。

随着适当的Zope2蛋的出现,Plone现在使用pkg_resources模块进行此测试,而在Zope 2.12中,getZopeVersion API也在内部使用pkg_resources。 collective.monkeypatcher precondition测试还使用pkg_resources来内省包版本。

Unable to detect Zope version日志条目中我推断您使用的是较旧的Plone版本(3.0或更早版本),因此您最有可能使用Zope 2.10。 Zope 2.10不是一个鸡蛋,因此pkg_resources没有鸡蛋元数据来获取版本。因此,对于2.12之前的任何Zope版本,版本测试都会失败。

显而易见的解决方法是不要在早于2.12的Zope服务器上使用定义monkeypatch的包。但您也可以使用plone.recipe.zope2install食谱中包含的版本信息生成假蛋:

[zope2]
recipe = plone.recipe.zope2install
...
additional-fake-eggs =
    Zope2 = 2.10.11

假鸡蛋为pkg_resources提供了足够的元数据来获取版本号,但zope2install食谱会写一个默认的Zope2假鸡蛋,版本为0.0。通过使用版本号定义假鸡蛋,您最终会使用pkg_resources为您提供足够的信息以满足前提条件。您可能需要升级plone.recipe.zope2install版本,我看到一些重构和错误修复已应用于生成可能影响您的假鸡蛋的方式。

答案 1 :(得分:-1)

我认为问题出在你的monkeypatch指令的preconditions属性中。

请参阅http://pypi.python.org/pypi/collective.monkeypatcher

上的文档