一种康复的、不那么危险的腌菜。

pikl的Python项目详细描述


pikl自述文件

https://travis-ci.org/moreati/pikl.svg?branch=masterCoverage statusPyPIPython versions

此包试图创建已修复的pickle模块:

  • 已删除全局和INST操作码。copyreg扩展注册表是 作为转储或加载自定义类的唯一(opt-in)机制。
  • 已删除协议0和1支持。只接受二进制泡菜。
  • protocol 3是python 2.x和python3.x上的默认协议

pikl派生自zodbpickle,这是zodb的统一pickling接口。

注意

pikl最终派生自python的pickle模块。 尽管已经努力消除已查明的安全漏洞, 几乎可以肯定的是,仍然存在更多的伤害。

pickle模块不是用来防止错误或 恶意构建的数据。从不解除从 可能会执行不受信任或未经身份验证的源作为任意代码。

另请参见https://docs.python.org/3.6/library/pickle.html

一般用法

要使用pikl而不是python的内置pickle模块,请替换:

import pickle

签署人:

import pikl.pickle as pikl

这提供了兼容性,但其效果是您可以快速实现 在Python3中,Python2使用慢速版本。

要获得更确定的实现选择,请使用以下选项之一:

import pikl.fastpickle as pikl # always C
import pikl.slowpickle as pikl # always Python

pickle生成的bytestream可以由pikl加载,前提是 满足某些限制(例如,协议>;=2,不使用全局操作码):

$ python3
>>> import pickle
>>> s = pickle.dumps({'abc': 2})
>>> from pikl import pickle as pikl
>>> pikl.loads(s)
{'abc': 2}

加载早期协议将引发UnpicklingError

>>> s = pickle.dumps({'abc': 2}, protocol=0)
>>> pikl.loads(s)
Traceback (most recent call last):
...
pikl.pickle_3.UnpicklingError: Only binary pickle protocols are supported

加载未注册的类或可调用的类将引发UnpicklingError

>>> s = pickle.dumps(complex(2, 1))
>>> pikl.loads(s)
Traceback (most recent call last):
...
pikl.pickle_3.UnpicklingError: GLOBAL opcode is not supported

扩展注册表

提供用于加载类或可调用项的opt-in机制pikluses copyreg模块中的扩展注册表:

>>> import copyreg
>>> copyreg.add_extension('builtins', 'complex', 240)
>>> s = pickle.dumps(complex(2, 1))
>>> pikl.loads(s)
(2+1j)

pickler和unpickler必须在相同的注册表代码上达成一致。未来 pikl的版本将包括一个机制(例如定义的配置文件)来实现这一点 协助。

更改日志

0.0.1(2018-09-26)

  • 从Zodbpickle 1.0.3中分叉
  • 删除对pickle协议0和1的支持
  • 拆下对DUP操作码的支持
  • 删除对全局操作码的支持
  • 拆下INST操作码支架
  • 添加pickle.lowest_protocol和cpickle.lowest_protocol常量

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java检查整数是0还是检查变量是null更好?   java Android Kotlin(初学者)使用File(),并从ACTION\u GET\u内容返回Uri   java JavaFx在“内部场景”和根场景之间切换   spring将XMLBean配置转换为java配置   java JPA HIBERNATE映射列两次(embeddedID和POJO)   c#单态模式模型在什么情况下适用?   java请求。getRemoteUser在特定时间后返回null?   spring boot中PUT api控制器的java my单元测试用例失败   java在字符串中互换地解析和替换值   java Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常   JavaSpringDataMongo:使用非简单键持久化映射   爪哇玻璃鱼连接被拒绝   java如何在用户注册时发送特定电子邮件id的自动回复?   Java列表:实例化时和之后的赋值之间的差异