python - 如何在 Python 2.7 中加载 Python 3 pickle *不改变它*?

标签 python python-3.x python-2.7 pickle

我正在将一个大型软件从 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/

相关文章:

python - Airflow DAG 中的外部文件

Python 上下文管理器未清理

python - 如何在控制台的单行上显示倒计时?

python - 模块 `collections` 中的其他 26 个元素

python - 脚本重启后存在连接错误

python - py.test 内部错误> IndexError : list index out of range

python - PyOpenCV 不会使用 Python2.7 在 Raspbian 上构建

python - 如何在列表中搜索包含三个元素的元组

python - 子类空 numpy recarray 丢失其类型并在 numpy 1.8 中添加属性

python - ScrollView 在 kivy 中显示不同的视频一段时间后会滞后