【问题标题】:python - No module named dill while using pickle.load()python - 使用pickle.load()时没有名为dill的模块
【发布时间】:2018-07-30 15:09:12
【问题描述】:

我的 python 2.7 中安装了 dill,但是当我尝试解开我的模型时,它显示“没有名为 dill 的模块”。腌制文件包含熊猫系列。

编辑: 这是 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

【问题讨论】:

  • 如果你做一个简单的import dill会发生什么?
  • 有时它是阻碍程序的小东西
  • 实际上,它可以在我的本地机器上运行,甚至可以在 ec2 上的虚拟环境上运行,但是当我使用 ElasticBeanstalk 部署它时,它会抛出此错误。我会尝试进口莳萝。谢谢。
  • 不,没用。
  • Have you already installed dill (pip install dill`) 在您的目标环境中?

标签: python pandas pickle dill


【解决方案1】:

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

pip freeze | grep -i 'dill'

例如,它输出:dill==0.2.7.1,低于 beanstalk 上的值

然后使用降级

pip install dill==0.2.7.1

【讨论】:

    【解决方案2】:

    两件事:

    1) 这看起来像是 $PATH 问题(或者,类似地,链接问题)...您似乎至少有两个 python 安装(一个位于 /opt/python,可能来自 macports 之类的东西,一个位于/usr/lib64,也可能是 venv 中的三分之一)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      相关资源
      最近更新 更多