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

时间:2018-07-30 15:09:13

标签: python pandas pickle dill

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

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

2 个答案:

答案 0 :(得分:3)

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

pip freeze | grep -i 'dill'

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

然后使用降级

pip install dill==0.2.7.1

答案 1 :(得分:0)

两件事:

1)这看起来像是$ PATH问题(或类似的链接问题)...您似乎至少安装了两个python安装程序(一个安装在/ opt / python中,大概来自macports,另一个安装在/ usr / lib64,可能是venv的三分之一)。

我猜想,如果您仔细确认使用的是哪个python,并且哪个与您使用的$line =~ s/TIME=\"([0-9]+8.[0-9]+7)\"/TIME=\"00000000.0000000\"/g 相对应,您可能会发现pip,而您使用的其他模块并不全部相同的python安装。

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