Если вы можете установить пакет, я бы порекомендовал попробовать dill , который отлично работал для моего проекта. Приятной особенностью этого пакета является то, что он имеет тот же интерфейс, что и pickle
, поэтому, если вы уже использовали pickle
в своем проекте, вы можете просто заменить его в dill
и посмотреть, работает ли сценарий, не изменяя код , Так что это очень дешевое решение!
(полное раскрытие информации: я никоим образом не связан и не участвовал в проекте укропа.)
Установить пакет:
pip install dill
Затем отредактируйте код для импорта dill
вместо pickle
:
# import pickle
import dill as pickle
Запустите ваш скрипт и посмотрите, работает ли он. (Если это так, вы можете очистить свой код, чтобы больше не скрывать имя модуля pickle
!)
Некоторые особенности типов данных, которые dill
могут и не могут сериализовать, начиная с страницы проекта :
dill
можно мариновать следующие стандартные типы:
нет, тип, bool, int, long, float, complex, str, unicode, tuple,
список, dict, файл, буфер, встроенный, старый и новый классы стилей,
экземпляры старых и новых классов стилей, set, frozenset, array,
функции, исключения
dill
также можно мариновать более «экзотические» стандартные типы:
функции с выходами, вложенные функции, лямбда-выражения, ячейка, метод,
unboundmethod, модуль, код, methodwrapper, dictproxy,
methoddescriptor, getsetdescriptor, memberdescriptor,
дескриптор оболочки, xrange, ломтик, не реализован, многоточие, выход
dill
пока не может мариновать следующие стандартные типы:
рама, генератор, трассировка