首页 > 解决方案 > sklearn.externals joblib 抛出 ImportError - 服务器上没有名为 joblib.numpy_pickle 的模块

问题描述

我正在努力解决工作库问题。

我需要将推理应用程序推送到远程服务器,我还需要加载一个保存的标准缩放器,因为如果我尝试适应,我会遇到内存不足的异常。我无法对服务器进行物理更改,因为它是一个sap cloud Foundry 实例,我看不到解决它的方法。

来自服务器的回溯:

   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR   File "app.py", line 40, in <module>
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR     standard_scaler = joblib.load('./datascaler.save')
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR   File "/home/vcap/deps/0/python/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.py", line 598, in load
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR     obj = _unpickle(fobj, filename, mmap_mode)
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR   File "/home/vcap/deps/0/python/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.py", line 526, in _unpickle
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR     obj = unpickler.load()
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR   File "/home/vcap/deps/0/python/lib/python2.7/pickle.py", line 864, in load
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR     dispatch[key](self)
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR   File "/home/vcap/deps/0/python/lib/python2.7/pickle.py", line 1096, in load_global
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR     klass = self.find_class(module, name)
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR   File "/home/vcap/deps/0/python/lib/python2.7/pickle.py", line 1130, in find_class
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR     __import__(module)
   2019-08-05T15:34:41.54+0200 [APP/PROC/WEB/0] ERR ImportError: No module named joblib.numpy_pickle

从我在类似帖子中看到的情况来看,joblib 版本冲突/不匹配可能是一个原因,但我对此无能为力,因为它不是我的本地机器出现此错误。

有没有其他方法可以保存缩放器,或者解决这个冲突?

标签: pythonscikit-learnsap-cloud-platform

解决方案


我也遇到了这个问题。可能有两个原因。

  1. sklearn.externals.joblib加载时保存的模式joblib。(sklearn.externals.joblib 和 joblib 是不同的库)

  2. 两者sklearn.externals.joblib都用于保存和加载阶段。但是,它们是不同的scikit-learn版本。例如,在保存阶段scikit-learn==0.19.1,而在加载阶段scikit-learn==0.21.x

修复它的最佳方法是使用具有相同版本的 joblib。sklearn.externals.joblib 将在未来版本中删除。


推荐阅读