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

Ankush Bhatia picture Ankush Bhatia · Jul 30, 2018 · Viewed 11.7k times · Source

I have dill installed in my python 2.7 but when I try to unpickle my model it says "No module named dill". The pickled file contains pandas series.

EDIT : Here's the snapshot of the traceback on ElasticBeanstalk environment

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

Answer

Alok Nayak picture Alok Nayak · Aug 7, 2018

If version on your Elastic beanstalk or error environment is greater than your local version then downgrade your dill package to the package which is working on your EC2 or local machine. On your local machine, check current dill package:

pip freeze | grep -i 'dill'

e.g it outputs: dill==0.2.7.1 which is lower than what it is on beanstalk

then downgrade using

pip install dill==0.2.7.1