跳转到主要内容

使用Python的zipfile API提取Deflate64 ZIP存档。

项目描述

zipfile-deflate64

PyPI

使用Python的zipfile API提取Deflate64 ZIP存档。

安装

pip install zipfile-deflate64

支持Python 3.6、3.7、3.8、3.9和3.10,并在PyPI上发布了manylinux2014、macOS和Windows轮

用法

Python代码库中的任何位置

import zipfile_deflate64  # This has the side effect of patching the zipfile module to support Deflate64

或者,zipfile_deflate64重新导出zipfile API,以便于使用

import zipfile_deflate64 as zipfile

zipfile.ZipFile(...)
...

设计原理

问题

微软Windows资源管理器最近版本在创建大于2GB的ZIP文件时使用Deflate64压缩(请参阅链接)。由于Windows的普及和“发送到压缩文件夹”的易用性,新创建的大多数ZIP文件都使用Deflate64压缩。

然而,在开源生态系统中对Deflate64的支持非常薄弱!大多数ZIP库都拒绝实现Deflate64,理由是其专有性质。

在.NET生态系统中,ZipArchive API仅支持解压缩。在Java中,Apache Commons Compress API支持压缩和解压缩。

7-Zip项目可能提供了对压缩和解压缩Deflate64的最佳通用支持,但存在一些阻碍通用可用性的障碍

  • 7-Zip本身是一个仅适用于Windows的GUI应用程序
    • 7-Zip仍在发布新版本,但拒绝实现某些新的压缩格式,因此mcmilk/7-Zip-zstd分支值得关注。
  • p7zip,POSIX兼容的CLI版本(其中包含Deflate64),自2016年以来没有发布新版本,可能是未维护的。
  • p7zip没有为外部软件调用解压缩操作构建API。
  • p7zip似乎现在以jinfeihan57/p7zip分支的形式存在,由Arch Linux等打包。
    • 这似乎是活跃的,现在可以使用CMake构建,但没有支持构建外部API。
  • 许多7-Zip的重新实现,如用于Python的py7zr,不支持Deflate64。

特别是在Python生态系统中,已经提出了几个未满足的请求([1] [2] [3] )以支持Deflate64解压缩。

解决方案

似乎最好的希望是zlib的infback9扩展。这是由zlib的原始作者Mark Adler于2003年开发的,并保留在zlib的源代码库中,但它不是官方支持,不包含构建工具,且不随zlib包分发。此外,infback9仅提供对处理Deflate64位流的低级支持,不提供对ZIP归档格式的支持(这超出了zlib的范围)。

infback9的C语言API相对简单,但需要非平凡的struct和函数指针进行初始化以及一些显式的内存管理操作(调整分配的缓冲区大小并提供Python友好的malloc),因此仅使用ctypes包装似乎是不够的。

为了管理ZIP归档提取操作,Python标准库中的zipfile模块提供了基本功能,并且已经在可用性和使用方面无处不在。然而,zipfile难以扩展,因为它硬编码了许多压缩格式的条件判断,并且不提供轻松增强或替换其部分的功能。猴子补丁可以克服这些问题,而将标准库模块的即插即用、API兼容的补丁降级为基于更自然可扩展的第三方ZIP操作包的工程优势。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

zipfile-deflate64-0.2.0.tar.gz (62.9 kB 查看哈希值)

上传时间 源代码

构建版本

zipfile_deflate64-0.2.0-cp310-cp310-win_amd64.whl (20.2 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

zipfile_deflate64-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.5 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86-64

zipfile_deflate64-0.2.0-cp310-cp310-macosx_10_14_x86_64.whl (19.2 kB 查看哈希值)

上传时间 CPython 3.10 macOS 10.14+ x86-64

zipfile_deflate64-0.2.0-cp39-cp39-win_amd64.whl (20.2 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

zipfile_deflate64-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.3 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86-64

zipfile_deflate64-0.2.0-cp39-cp39-macosx_10_14_x86_64.whl (19.2 kB 查看哈希值)

上传时间 CPython 3.9 macOS 10.14+ x86-64

zipfile_deflate64-0.2.0-cp38-cp38-win_amd64.whl (20.2 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

zipfile_deflate64-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (44.1 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64

zipfile_deflate64-0.2.0-cp38-cp38-macosx_10_14_x86_64.whl (19.2 kB 查看哈希值)

上传时间 CPython 3.8 macOS 10.14+ x86-64

zipfile_deflate64-0.2.0-cp37-cp37m-win_amd64.whl (20.2 kB 查看哈希值)

上传于 CPython 3.7m Windows x86-64

zipfile_deflate64-0.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.5 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ x86-64

zipfile_deflate64-0.2.0-cp37-cp37m-macosx_10_14_x86_64.whl (19.1 kB 查看哈希值)

上传于 CPython 3.7m macOS 10.14+ x86-64

zipfile_deflate64-0.2.0-cp36-cp36m-win_amd64.whl (20.5 kB 查看哈希值)

上传于 CPython 3.6m Windows x86-64

zipfile_deflate64-0.2.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.7 kB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.17+ x86-64

zipfile_deflate64-0.2.0-cp36-cp36m-macosx_10_14_x86_64.whl (19.2 kB 查看哈希值)

上传于 CPython 3.6m macOS 10.14+ x86-64

由以下支持

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