Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 608
DavideChicco.it Avatar asked Jul 19 '16 19:07

DavideChicco.it


1 Answers

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().

like image 100
cdarke Avatar answered Sep 19 '22 00:09

cdarke