python - 使用 pickle.load() 时没有名为 dill 的模块

python - No module named dill while using pickle.load()

我在 python 2.7 中安装了 dill,但是当我尝试解开我的模型时,它显示 "No module named dill"。腌制文件包含 pandas 系列。

编辑: 这是 ElasticBeanstalk 环境

上回溯的快照
File "/opt/python/current/app/app/models/classification.py", line 663, in __init__
  self.lookupdict = pickle.load(open(<filepath>))
File "/usr/lib64/python2.7/pickle.py", line 1384, in load
  return Unpickler(file).load()
File "/usr/lib64/python2.7/pickle.py", line 864, in load
  dispatch[key](self)
File "/usr/lib64/python2.7/pickle.py", line 1096, in load_global
  klass = self.find_class(module, name)
File "/usr/lib64/python2.7/pickle.py", line 1130, in find_class
  __import__(module)
File "/opt/python/run/venv/local/lib64/python2.7/site-packages/gevent/builtins.py", line 93, in __import__
  result = _import(*args, **kwargs)
ImportError: No module named dill

两件事:

1) 这看起来像 $PATH 问题(或者类似地,链接问题)...您似乎至少有两个 python 安装(一个在 /opt/python,大概来自类似 macports 的东西,一个在 /usr/lib64,可能还有一个在 venv。

我猜如果你仔细确认你使用的是哪个 python,以及哪个对应你使用的 pip,你可能会发现 dill 和其他模块正在使用的并非都在同一个 python 安装中。

2) 请注意,在回溯的第一行中,您似乎正在使用 pickle.load...如果您想使用 dill,您不应该使用 dill.load 取消序列化对象?

如果您的 Elastic beanstalk 或错误环境上的版本高于您的本地版本,则将您的 dill 包降级为在您的 EC2 或本地计算机上运行的包。 在您的本地机器上,检查当前的 dill 包:

pip freeze | grep -i 'dill'

例如,它输出:dill==0.2.7.1,低于 beantalk

然后使用

降级
pip install dill==0.2.7.1