У меня есть своя библиотека, скажем А, один из модулей которой, скажем М, предоставляет класс C. Туева хуча данных с экземпляром этого класса сохранено на диск при помощи pickle.
Теперь я делаю новую версию, библиотеки, с новым именем B (поскольку пришлось сломать обратную совместимость), модуль M перекочевывает в эту новую версию с какими то измениями (в т.ч. со смненой имени на N), но обратная сериализация работает.
ТОчнее работала-бы, если бы удалось как то объяснить питону что это тот же модуль.
Pickle при сохранениии данных пишет имя, модуля из которого был импотртирова экземпляр класса, в моем случае это A.M. При обратной сериализации он делает
import A.M
Я могу заранее проимпортировать B.N, и добавить в нем строчку
sys.modules['A.M'] = sys.modules['B.N']
Можно конено перегрузить функцию __import__ в B.N:
def _import_hook(*args, **kw_args):
if args[0]=='A.M': import sys; return sys.modules[__name__]
return _builtins_import(*args, **kw_args)
_builtins_import, __builtins__['__import__'] = __import__, _import_hook