Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plone 将my.package重命名为my.package_Plone_Zodb - Fatal编程技术网

Plone 将my.package重命名为my.package

Plone 将my.package重命名为my.package,plone,zodb,Plone,Zodb,my.packages是src目录中的自定义原型包。Plone实例中的数千项都与它的类型一起添加。我想将包重命名为my.package。通过简单地卸载my.packages并安装my.package,我发现显示了。我应该做迁移吗?或者有没有一种简单的方法来解决这个问题?您可以通过使用sys.modules来创建一个向后兼容的别名。在您的软件包中执行此操作\uuuu init\uuuuu.py: 导入系统 sys.modules['my.packages']=sys.modules[\u名称\u]

my.packages是src目录中的自定义原型包。Plone实例中的数千项都与它的类型一起添加。我想将包重命名为my.package。通过简单地卸载my.packages并安装my.package,我发现显示了
。我应该做迁移吗?或者有没有一种简单的方法来解决这个问题?

您可以通过使用
sys.modules
来创建一个向后兼容的别名。在您的软件包中执行此操作
\uuuu init\uuuuu.py

导入系统 sys.modules['my.packages']=sys.modules[\u名称\u] 这样,持久性机制仍然可以找到您的类

当原型实例被持久化到ZODB中时,持久化机制会在存储的数据中存储类的模块路径(点式python路径,如
my.packages.types.foobar.foobar
)。从ZODB恢复对象时,将使用相同的路径重新创建实例。重命名包时,所有这些引用都会被破坏

使用上述技巧,一件好事是,如果您的对象在事务中被更改并再次写入ZODB,那么新的模块路径将被存储。因此,您可以从这个包中写入所有的原型实例,使迁移永久化,这样您就可以再次删除上面的工作