我正在使用joblib.dump()
保存对象。当我尝试使用另一个Python实例(但版本相同)打开它时,joblib抱怨它无法加载特定模块:
ImportError: No module named some_module
现在,该模块some_module
确实在该Python实例中不可用。
但问题是,我试图加载的对象根本不需要该模块。
所以我的问题是,为什么joblib认为它需要这个包?
它是否以某种方式包含转储时处于活动状态的所有模块?
答案 0 :(得分:1)
Joblib使用pickle
。 pickle
可以将任意Python对象存储到磁盘,然后将其恢复到另一个进程。但是,如果该Python对象是或包含在执行转储的代码中定义的类的实例,那么该类定义需要在执行加载的代码中可用。
如果该类是在由导入转储的代码导入的库中定义的,那么它还需要在加载时导入该库。您无需执行导入:pickle
将为您执行此操作。但它必须可以导入。
我知道您不认为您尝试加载的对象需要该类。但是pickle
确实这么认为。