我正在将一个大型软件从 python 2.7 迁移到 python 3.7
出于回溯测试的目的,我需要能够在新的 (3.7) python 中读取旧的 (2.7) pickle,反之亦然。
I can read old pickles in new python.
我还希望能够在旧Python中读取新的 pickle 。
I found this answer ,但这对我来说不好,因为它需要我更换 pickle 。
有没有办法在 python 2 中读取 python 3 pickle 而不改变 pickle?
最佳答案
这是我能找到的最佳解决方案:
由于我可以更改新软件,但不能更改旧软件,因此每次我创建一个必须由旧软件读取的pickle时,我都会这样做
def create_old_pickle(new_pickle):
loaded = pickle.loads(new_pickle)
repickled = pickle.dumps(loaded, protocol=2)
return repickled
这会在新的 python 中创建旧的 pickle。
因此旧的软件 API 保持不变。
您可能会注意到 unicode->bytes 问题,但那是另一回事。
关于python - 如何在 Python 2.7 中加载 Python 3 pickle *不改变它*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59630013/