Python序列化反序列化库安装_pip一键安装json/pickle/marshal指南

12次阅读

json、pickle、marshal 均为python标准库内置模块,无需pip安装;pip install json等会报错,因其非PyPI包;仅当标准库有短板(如json不支持datetime、pickle不跨语言、marshal版本不兼容)时,才需安装orjson、cloudpickle、msgpack等第三方库。

Python序列化反序列化库安装_pip一键安装json/pickle/marshal指南

json、pickle、marshal 都不用 pip 安装

这三个模块全是 Python 标准库内置组件,只要装了 Python 就自带,import jsonimport pickleimport marshal 直接可用,运行 pip install json 会报错 Error: Could not find a version that satisfies the requirement json —— 因为它根本不是 PyPI 上的第三方包。

什么时候真要 pip 安装序列化相关库

标准库够用但有明显短板:比如 json 不支持 datetime / set / 自定义类;pickle 不跨语言、有安全风险;marshal 仅限 CPython 内部使用、不保证版本兼容。遇到这些限制才需要额外装库:

  • pip install orjson:比内置 json 快 3–5 倍,支持 datetime(需手动注册转换器)
  • pip install cloudpickle:扩展 pickle,能序列化 Lambda闭包、动态定义的类
  • pip install msgpack:二进制格式,体积小、速度快,支持部分非 JSON 类型(如 bytes),但不支持 NaN/Infinity

别误装“json”或“pickle”的假包

PyPI 上确实存在名字含 jsonpickle 的包(如 jsonlibpickledb),但它们和标准库无关,功能也不同:

  • pip install jsonlib → 是个已废弃的旧 JSON 解析器,和 json 模块不兼容,导入后是 import jsonlib
  • pip install pickledb → 是个轻量键值数据库,底层用 pickle 存文件,但 API 完全不是 pickle.dump() 那套
  • 搜错关键词容易装错,建议先查文档确认用途,再决定是否安装

marshal 为什么几乎不该在业务代码里用

marshal 是 CPython 解释器内部用的序列化机制,专为 .pyc 字节码服务,官方明确声明:“The marshal module is not intended to be secure against erroneous or maliciously constructed data.” 实际踩坑点包括:

立即学习Python免费学习笔记(深入)”;

  • 不同 Python 版本间 marshal 数据通常不兼容(比如 3.9 dump 的数据,3.10 load 可能失败)
  • 不能序列化函数、类实例、大多数内置类型以外的对象TypeError: can't serialize dict_keys Object
  • 没有公开的稳定接口,随时可能被 CPython 内部重构影响

除非你在写解释器扩展或调试 .pyc,否则绕开 marshal

text=ZqhQzanResources