web-dev-qa-db-fra.com

Python, comment gérer l'erreur "ValueError: unsupported pickle protocol: 4"?

Je suis nouveau sur Python. Je dois exécuter ceci script TargetFinder ("Analyses personnalisées") .

J'ai installé tous les packages python et j'ai copié le code dans un script que j'ai nommé main.py, et je l'ai exécuté. J'ai eu cette erreur:

[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

Je n'ai aucune idée de ce que signifie ce protocole de cornichons, et mes collègues ne savent rien à ce sujet.

Comment puis-je résoudre ce problème?

J'utilise Python 2.7.5 sur un système d'exploitation CentOS Linux version 7.2.1511 (Core)

21
DavideChicco.it

Le protocole Pickle est essentiellement le format de fichier. D'après la documentation , Plus le protocole utilisé est élevé, plus la version de Python nécessaire pour lire le cornichon produit est récente. ... La version 4 du protocole Pickle a été ajoutée dans Python 3.4 , votre = python (2.7.5) ne prend pas cela en charge.

Soit mettre à niveau vers Python 3.4 ou version ultérieure (le courant est 3.5) ou créer le cornichon en utilisant un protocole inférieur (2) dans le troisième paramètre à pickle.dump().

22
cdarke