DavideChicco.it
DavideChicco.it

Reputation: 3470

Python, how to handle the "ValueError: unsupported pickle protocol: 4" error?

I'm new to Python. I've to run this TargetFinder script ("Custom Analyses").

I installed all the required python packages, and copied the code into a script I named main.py, and ran it. I got this error:

[davide@laptop]$ python main.py 
Traceback (most recent call last):
  File "main.py", line 8, in <module>
    training_df = pd.read_hdf('./paper/targetfinder/K562/output-epw/training.h5', 'training').set_index(['enhancer_name', 'promoter_name'])
  File "/usr/lib64/python2.7/site-packages/pandas/io/pytables.py", line 330, in read_hdf
    return store.select(key, auto_close=auto_close, **kwargs)
  File "/usr/lib64/python2.7/site-packages/pandas/io/pytables.py", line 680, in select
    return it.get_result()
  File "/usr/lib64/python2.7/site-packages/pandas/io/pytables.py", line 1364, in get_result
    results = self.func(self.start, self.stop, where)
  File "/usr/lib64/python2.7/site-packages/pandas/io/pytables.py", line 673, in func
    columns=columns, **kwargs)
  File "/usr/lib64/python2.7/site-packages/pandas/io/pytables.py", line 2786, in read
    values = self.read_array('block%d_values' % i)
  File "/usr/lib64/python2.7/site-packages/pandas/io/pytables.py", line 2327, in read_array
    data = node[:]
  File "/usr/lib64/python2.7/site-packages/tables/vlarray.py", line 677, in __getitem__
    return self.read(start, stop, step)
  File "/usr/lib64/python2.7/site-packages/tables/vlarray.py", line 817, in read
    outlistarr = [atom.fromarray(arr) for arr in listarr]
  File "/usr/lib64/python2.7/site-packages/tables/atom.py", line 1211, in fromarray
    return cPickle.loads(array.tostring())
ValueError: unsupported pickle protocol: 4

I've no idea about what this pickle protocol means, and also my colleagues know nothing about it.

How can I solve this problem?

I'm using Python 2.7.5 on a CentOS Linux release 7.2.1511 (Core) operating system

Upvotes: 33

Views: 55237

Answers (3)

Keshav Balachandar
Keshav Balachandar

Reputation: 21

It's a python version issue, upgrade it to the latest python version and try.

Upvotes: 1

iqmaker
iqmaker

Reputation: 2262

This sometimes happens due to incorrect data in the redis database. Try it:

sudo redis-cli flushall

Upvotes: 5

cdarke
cdarke

Reputation: 44354

The Pickle protocol is basically the file format. From the documentation, The higher the protocol used, the more recent the version of Python needed to read the pickle produced. ... Pickle protocol version 4 was added in Python 3.4, your python version (2.7.5) does not support this.

Either upgrade to Python 3.4 or later (current is 3.5) or create the pickle using a lower protocol (2) in the third parameter to pickle.dump().

Upvotes: 36

Related Questions