创建确定的ZIP文件的程序。

deterministic-zip的Python项目详细描述


确定性压缩

生成一致zip文件的工具。

此工具是专门为防止ZIP文件更改触发而构建的 aws lambda函数在运行terraform apply时更新。在这次改变之前, 每次重新构建zipfile都会导致不同的zip,即使 内容没有改变。

要求

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

安装

pip install 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行尾(窗口),则结果应为:

40e16270d62f15e7a192e88b1b301fa6540c86e7e897036b56be513341d376ed

它是如何工作的?

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

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

  2. zip中的文件必须具有一致的时间戳。如果我将目录共享给 另一台机器,单个文件的时间戳可能不同,depsite 相同的内容。为了实现时间戳一致性,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对文件具有执行访问权限。

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像