我最近删除了一个模块xyz
,并将其替换为另一个不同名称abc
的模块.在某些PICLE文件中,它仍然导入xyz
模块.我想将其更改为导入abc
模块.我怎么能这样做呢?
我在序列化/反序列化方面没有太多经验.我的理解是,我必须读入PICLE文件(即反序列化),并以某种方式进行更改,然后在更改后再次序列化它.
我最近删除了一个模块xyz
,并将其替换为另一个不同名称abc
的模块.在某些PICLE文件中,它仍然导入xyz
模块.我想将其更改为导入abc
模块.我怎么能这样做呢?
我在序列化/反序列化方面没有太多经验.我的理解是,我必须读入PICLE文件(即反序列化),并以某种方式进行更改,然后在更改后再次序列化它.
您可以通过手动更新sys.modules
将abc
导入为xyz
,而不是修改Pickle文件:
import sys
import abc
sys.modules["xyz"] = abc
任何导入xyz
的try 都将使用已经加载的xyz
模块,它只是abc
的别名.
import xyz
>>> print(xyz)
<module 'abc' ...>
在将相关模块插入到sys.modules
中之后,您将能够加载旧的Pickle文件,而无需对文件本身进行任何修改.
由于反序列化对象将使用abc
的成员加载,如果您立即重新 Select 它们,您将得到一个仅包含对abc
(而不是xyz
)的引用的PICLE文件.