使用 Sphinx 时是否应该提交 environment.pickle?

Should you commit environment.pickle when working with Sphinx?

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

Pickle 文件是 Python 使用的一种二进制序列化格式。它们可用于将 Python 对象序列化为二进制形式,然后再反序列化它们。根据 the Python documentation:

,你永远不应该分发 pickle 文件,因为不受信任的 pickle 文件可以在反序列化期间执行任意代码

It is possible to construct malicious pickle data which will execute arbitrary code during unpickling. Never unpickle data that could have come from an untrusted source, or that could have been tampered with.

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

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

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