2016-07-19 44 views
8

Jestem nowy w Pythonie. Muszę uruchomić to TargetFinder script ("Custom Analyses").Python, jak obsługiwać błąd "ValueError: unsupported protokół pickle: 4"?

Zainstalowałem wszystkie wymagane pakiety Pythona i skopiowałem kod do skryptu o nazwie main.py i uruchomiłem go. mam ten błąd:

[[email protected]]$ 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 

nie mam pojęcia o tym, co oznacza to protokół marynowane, a także moi koledzy nic nie wiedzą o tym.

Jak mogę rozwiązać ten problem?

Używam Python 2.7.5 na CentOS Linux wersji systemu 02.07.1511 (Core) działających

+0

Jak powstał plik 'training.h5'? –

+0

Nie wiem: twórcy skryptów TargetFinder umieścili go wśród wszystkich plików. –

+0

W takim przypadku potrzebujesz pythona 3.4 lub nowszego. – cdarke

Odpowiedz

10

Protokół marynacie jest w zasadzie taki format pliku. Od documentation, Im wyższy stosowany protokół, tym nowsza wersja Pythona potrzebuje przeczytać wyprodukowany pikle. ... Wersja protokołu Pickle 4 została dodana w Pythonie 3.4, wersja pythonowa (2.7.5) nie obsługuje tego.

Uaktualnij do wersji 3.4 lub nowszej (aktualna jest 3.5) lub utwórz pikle za pomocą niższego protokołu (2) w trzecim parametrze na pickle.dump().