使用Sphinx时是否应该进行environment.pickle?

问题描述

我正在使用Sphinx生成一些文档,并将此生成的文档发布到git存储库中。构建目录中的文件之一称为environment.pickle,并且似乎为二进制格式,即不是纯文本格式。这个文件是什么,提交时应该包括它吗?

解决方法

Pickle文件是Python使用的一种二进制序列化格式。它们可用于将Python对象序列化为二进制形式,然后在以后对其进行反序列化。根据{{​​3}},您永远不应该分发pickle文件,因为不受信任的pickle文件可以在反序列化期间执行任意代码:

可以构造恶意的腌制数据,这些数据将在解腌期间执行任意代码。永远不要挑剔那些可能来自不受信任的来源或被篡改的数据。

通常,任何能够序列化和反序列化任意对象的对象格式都不能在不受信任的数据上使用,因为可以利用这些对象的构造函数和析构函数来执行任意代码。由于没有人可以安全地使用这些pickle文件,因此没有理由分发它们。

通常,您也不应该将Git用于构建工件,例如,构建文档。构建工件通常是二进制的并且很大,并且这些类型的对象在Git中难以使用。此外,您可能对保留每个构建工件的整个历史不感兴趣,因为您可以从源代码中重新生成它们。此类对象的Git存储库将很快变得肿。

使用其他部署格式(例如tarball)会更好。您尚未告诉我们要在哪里部署这些更改,因此我们无法为您提供有关如何部署此内置文档的更好建议。