Возможно, есть более элегантный способ, но чтобы перейти к металлу, вы можете использовать pickletools
:
import pickle
import pickletools
s = pickle.dumps('Test')
proto_op = next(pickletools.genops(s))
assert proto_op[0].name == 'PROTO'
proto_ver = proto_op[1]
Чтобы выяснить версию, необходимую для его декодирования, вам потребуется максимальный протоколверсия каждого кода операции:
proto_ver = max(op[0].proto for op in pickletools.genops(s))