在python中将自定义模块与对象一起序列化

时间:2017-03-05 21:02:42

标签: python serialization pickle python-module dill

问题

我们说这个模块名为custom_module

class CustomClass:
    pass

我在一个脚本中使用这个类,该脚本序列化我在custom_module中定义的类的对象:

import cloudpickle
import custom_module as cm

custom_object = cm.CustomClass()
with open('filename.pkl', 'wb') as file:
    cloudpickle.dump(custom_object, file)

我将此pickle文件复制到另一个环境并使用另一个脚本加载它:

import cloudpickle

with open('filename.pkl', 'rb') as file:
    custom_object = cloudpickle.load(file)

这会产生这个错误:

Traceback (most recent call last):
  File "loader.py", line 4, in <module>
    custom_object = cloudpickle.load(file)
ModuleNotFoundError: No module named 'custom_module'

尴尬的解决方案

作为一种解决方法,可以在我的脚本中读取和执行custom_module中的所有内容:

exec(open(path.join('custom_module.py')).read())

但这看起来很奇怪,我不能将CustomClass用作cm.CustomClass。有没有其他解决方案不涉及将第一个环境中的所有代码复制到第二个环境?

0 个答案:

没有答案