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

json、pickle、marshal 都不用 pip 安装
这三个模块全是 Python 标准库内置组件,只要装了 Python 就自带,import json、import pickle、import 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 上确实存在名字含 json 或 pickle 的包(如 jsonlib、pickledb),但它们和标准库无关,功能也不同:
-
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。










