问题
我们说这个模块名为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
。有没有其他解决方案不涉及将第一个环境中的所有代码复制到第二个环境?