安装附加组件时出现PicklingError
我被授予将Plone站点从3.1.7升级到4.0.3的任务。我已经成功地得到升级的站点,但现在我想安装collective.lineage,我得到以下错误:安装附加组件时出现PicklingError
Traceback (innermost last):
Module ZPublisher.Publish, line 135, in publish
Module Zope2.App.startup, line 291, in commit
Module transaction._manager, line 93, in commit
Module transaction._transaction, line 322, in commit
Module transaction._transaction, line 416, in _commitResources
Module ZODB.Connection, line 558, in commit
Module ZODB.Connection, line 606, in _commit
Module ZODB.Connection, line 640, in _store_objects
Module ZODB.serialize, line 422, in serialize
Module ZODB.serialize, line 431, in _dump
PicklingError: Can't pickle<class 'quills.app.portlets.quillslinks.IQuillsLinksPortlet'>
: import of module quills.app.portlets.quillslinks failed
鹅毛笔在升级之前安装,但没有被利用在网站上所以我通过快速安装程序卸载它,同时该网站仍然是3.1.7(我不相信羽毛笔有卸载配置文件)。
此外,这个错误不会影响所有的附加组件,昨天我没有发生意外安装了collective.redirect。
很明显,奎斯并没有彻底卸载,但老实说,当修复这个问题时不知道从哪里开始。
任何帮助将不胜感激。
它看起来像我一样,当Quills被移除时,Quills分配了一些portlet,这些portlet并不是未分配的。
最好的解决方案是在删除Quills之前删除这些portlet。不幸的是,我并不知道有一个工具可以概览Portlet的分配位置,并一目了然地确定违规Portlet的位置,以便您可以将其移除。也许别人知道这样的工具?
您可以尝试使用portal_setup工具导出portlet配置;所生成的portlets.xml可能包含有关此Portlet或Portlet分配到的位置的信息。的
或替代定位和移除的portlet,你可以尝试注册一个虚拟的替代品,打碎的接口(这应该在某些产品的初始化代码在您的实例):
import imp, sys
from zope.interface import Interface
m = imp.new_module('quills.app.portlets.quillslinks')
sys.modules['quills.app.portlets.quillslinks'] = m
m.IQuillsLinksPortlet = Interface
这最后解决方案应该被认为是一个丑陋的黑客,但。