跳转到主要内容

创建确定性zip文件的程序。

项目描述

deterministic_zip

生成一致zip文件的工具。

此工具专门构建,以防止zip文件更改在运行terraform apply时触发AWS Lambda函数更新。在此更改之前,zip文件的每次重建都会导致不同的zip文件,即使其内容没有改变。

要求

此工具目前仅在python3.7上运行,以便使用deflate压缩级别9。

安装

pip install deterministic_zip

创建deterministic_zip

运行以下命令,并验证您的zip生成了相同的sha256哈希值

echo "The first file." > first
echo "The second file." > second
deterministic_zip archive.zip first second
sha256sum archive.zip

如果您有\n行结束符,则结果应为

3afbd7c9b42bd5539ffd5c40499d3d1825157ed83791dce8d7ff2694189d28d6

如果您有\r\n行结束符(Windows),则结果应为

40e16270d62f15e7a192e88b1b301fa6540c86e7e897036b56be513341d376ed

它是如何工作的?

这是个好问题!构建确定性zip有三个技巧。

  1. 文件必须按相同的顺序添加到zip中。目录迭代顺序可能因机器而异,导致不同的zip文件。 deterministic_zip在将文件添加到zip存档之前对所有文件进行排序。

  2. zip中的文件必须具有一致的时间戳。如果我将目录共享到另一台机器,单个文件的时间戳可能不同,尽管内容相同。为了实现时间戳一致性,deterministic_zip将所有添加的文件的时间戳设置为2019-01-01 00:00:00。请注意,这不会影响源文件的时间戳。

  3. ZIP文件中的文件必须具有一致的权限。文件权限类似于 -rw-r--r--,表示所有用户均可读取文件,而只有文件所属用户可以写入。类似地,可执行文件的权限可能类似于:-rwxr-xr-x-rwx------deterministic_zip 将所有文件的权限设置为 -r--r--r---r-xr-xr-x。后一种情况仅当运行 deterministic_zip 的用户具有文件执行权限时使用。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

deterministic_zip-0.1.tar.gz (3.9 kB 查看哈希值)

上传时间

构建分布

deterministic_zip-0.1-py3-none-any.whl (4.3 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页