跳转到主要内容

通过提供ISA-L库的Python绑定,实现更快zlib和gzip兼容的压缩和解压缩。

项目描述

python-isal

通过提供ISA-L库的Python绑定,实现更快zlib和gzip兼容的压缩和解压缩。

此包提供对ISA-L库的Python绑定。英特尔(R)智能存储加速库 (ISA-L) 在汇编语言中实现了几个关键算法。这包括提供zlib/gzip兼容压缩的各种函数。

python-isal通过提供四个模块提供绑定

  • isal_zlib:使用ISA-L加速性能的zlib模块的替代品。

  • igzip:使用isal_zlib代替zlib来执行其压缩和校验任务的gzip模块的替代品,从而提高性能。

  • igzip_threaded提供了一个返回缓冲的读写流的open函数,可以用来读取和写入大文件,同时使用一个或多个线程来避开全局解释器锁(GIL)。此功能仅适用于流操作,不支持定位。

  • igzip_lib:提供压缩函数,可以完全访问ISA-L压缩函数的API。

isal_zlibigzip几乎与Python标准库中的zlibgzip完全兼容。有一些细微的差异,请参阅:zlib和gzip模块的差异

快速入门

可以按以下方式导入python-isal模块:

from isal import isal_zlib
from isal import igzip
from isal import igzip_lib

isal_zlibigzip旨在作为替代品使用,因此它们的API和函数与stdlib模块相同。除非ISA-L不支持与zlib相同的调用(见下文差异)。

完整的API文档可以在我们的readthedocs页面上找到。

python -m isal.igzip实现了一个类似于gzip的简单命令行应用程序(就像python -m gzip一样)。完整的用法文档可以在我们的readthedocs页面上找到。

安装

  • 使用pip:pip install isal

  • 使用conda:conda install python-isal

支持在Linux、Windows和MacOS上安装。有关更高级的安装选项,请参阅文档

将python-isal作为项目依赖项

Python-isal支持有限数量的平台,已提供wheels。为了防止您的用户在安装您的项目时遇到问题,请按照以下方式列出python-isal依赖项。

setup.cfg:

install_requires =
    isal; platform.machine == "x86_64" or platform.machine == "AMD64" or platform.machine == "aarch64"

setup.py:

extras_require={
    ":platform.machine == 'x86_64' or platform.machine == 'AMD64' or platform.machine == 'aarch64'": ['isal']
},

与zlib和gzip模块的差异

  • zlibgzip中的压缩级别0表示无压缩,而在isal_zlibigzip中,这是最低压缩级别。这是从ISA-L库继承的设计选择。

  • 压缩级别从0到3,而不是从1到9。isal_zlib.Z_DEFAULT_COMPRESSION已别名为isal_zlib.ISAL_DEFAULT_COMPRESSION(2)。

  • isal_zlib仅支持NO_FLUSHSYNC_FLUSHFULL_FLUSHFINISH_FLUSH。不支持其他刷新模式,并将引发错误。

  • 出于兼容性原因,zlib.Z_DEFAULT_STRATEGYzlib.Z_RLE等已公开为isal_zlib.Z_DEFAULT_STRATEGYisal_zlib.Z_RLE等。isal_zlib仅支持默认策略,当使用其他策略时会给出警告。

  • zlib 支持从 1 到 9 级别的不同内存级别(默认为 8 级别)。isal_zlib 支持最小的、小的、中等的、大的和最大的内存级别。这些级别分别对应于 1 级别、2-3 级别、4-6 级别、7-8 级别和 9 级别。因此,isal_zlib 可以与兼容的 zlib 内存级别一起使用。

  • igzip.open 返回一个名为 IGzipFile 的类,而不是 GzipFile。由于压缩级别不兼容,因此选择了不同的命名来反映这一点。igzip.GzipFile 作为 igzip.IGzipFile 的别名存在,出于兼容性的考虑。

  • igzip._GzipReader 已经用 C 语言重写。由于这是一个私有成员,它不应该影响兼容性,但它可能会对直接使用此代码的实例造成一些问题。如果出现此类问题,请报告它们,以便修复兼容性问题。

贡献

如果您觉得有任何地方可以改进,请提交一个 PR 或 issue。也非常欢迎提交错误报告。请将这些报告在 github issue tracker 上。

开发

为了确保检出 ISA-L 仓库,需要递归克隆此仓库:git clone --recursive https://github.com/pycompression/python-isal.git。如果仓库已经检出,您可以使用 git submodule update --init

补丁应该在功能分支上创建。要运行测试,请使用 pip install tox 安装 tox,然后运行命令 tox -e linttox。这将运行与 CI 执行的许多测试。对于文档的更改,请运行 tox -e docs。对于 C 代码的更改,请还运行 tox -e asan 以检查内存泄漏。这需要安装 libasan。

构建还需要 ISA-L 构建要求

致谢

本项目建立在许多软件和经验的基础上。在此表示衷心的感谢:

  • 感谢 ISA-L 贡献者 为创建 ISA-L 所做的工作。特别感谢 @gbtucker,他始终非常乐于助人且反应迅速。

  • 感谢 Cython 贡献者,使他们能够轻松创建扩展,并帮助新手开始使用指针地址。

  • 感谢 CPython 贡献者。Python-isal 模仿标准库中的 zlibmodule.cgzip.py,这使得 Python 用户更容易采用它。

  • @marcelm 感谢他冒险使用这个项目,并将其作为他 xopen 和扩展项目 cutadapt 的依赖项。这为 python-isal 带来了第一批用户,他们开始在生产中使用 python-isal。

  • 感谢 Mark Adler (@madler) 在他的 pigz 代码中的出色评论,这使得使用 threadingisal_zlib 模块编写多线程 gzip 的行为非常容易进行复制。还要感谢他的宽松许可协议,这使得 crc32_combine 代码能够包含在项目中。(与 zlib 不同,ISA-L 不提供 crc32_combine 函数。)另外,还要感谢 Mark Adler 和 Jean-loup Gailly 创建了 gzip 格式,这在生物信息学中得到了非常广泛的应用。没有它,我就无法写出这个让我学到很多东西的库。

  • 为创建支持在所有三个主要操作系统上构建和测试的动作CI服务的GitHub Actions团队

  • 为解释如何在ARM 64位平台上测试和构建python-isal的@animalize

  • 最后但同样重要的是:所有提交了错误报告或功能请求的人。这些使项目变得更好!

没有您,Python-isal将无法实现!

项目详情


下载文件

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

源分布

isal-1.7.1.tar.gz (752.6 kB 查看哈希值)

上传时间:

构建分布

isal-1.7.1-pp310-pypy310_pp73-win_amd64.whl (203.1 kB 查看哈希值)

上传时间: PyPy Windows x86-64

isal-1.7.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256.0 kB 查看哈希值)

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

isal-1.7.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (231.8 kB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ ARM64

isal-1.7.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl (188.3 kB 查看哈希值)

上传时间: PyPy macOS 11.0+ ARM64

isal-1.7.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (238.2 kB 查看哈希值)

上传于 PyPy macOS 10.15+ x86-64

isal-1.7.1-pp39-pypy39_pp73-win_amd64.whl (203.1 kB 查看哈希值)

上传于 PyPy Windows x86-64

isal-1.7.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256.0 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

isal-1.7.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (231.8 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

isal-1.7.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl (188.3 kB 查看哈希值)

上传于 PyPy macOS 11.0+ ARM64

isal-1.7.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (238.2 kB 查看哈希值)

上传于 PyPy macOS 10.15+ x86-64

isal-1.7.1-pp38-pypy38_pp73-win_amd64.whl (203.1 kB 查看哈希值)

上传于 PyPy Windows x86-64

isal-1.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256.0 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

isal-1.7.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (231.8 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

isal-1.7.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl (188.3 kB 查看哈希值)

上传于 PyPy macOS 11.0+ ARM64

isal-1.7.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (237.7 kB 查看哈希值)

上传时间: PyPy macOS 10.9+ x86-64

isal-1.7.1-cp313-cp313-win_amd64.whl (202.5 kB 查看哈希值)

上传时间: CPython 3.13 Windows x86-64

isal-1.7.1-cp313-cp313-musllinux_1_2_x86_64.whl (264.6 kB 查看哈希值)

上传时间: CPython 3.13 musllinux: musl 1.2+ x86-64

isal-1.7.1-cp313-cp313-musllinux_1_2_aarch64.whl (233.1 kB 查看哈希值)

上传时间: CPython 3.13 musllinux: musl 1.2+ ARM64

isal-1.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.2 kB 查看哈希值)

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

isal-1.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (232.4 kB 查看哈希值)

上传时间: CPython 3.13 manylinux: glibc 2.17+ ARM64

isal-1.7.1-cp313-cp313-macosx_11_0_arm64.whl (188.5 kB 查看哈希值)

上传时间: CPython 3.13 macOS 11.0+ ARM64

isal-1.7.1-cp313-cp313-macosx_10_13_x86_64.whl (237.0 kB 查看哈希值)

上传时间: CPython 3.13 macOS 10.13+ x86-64

isal-1.7.1-cp313-cp313-macosx_10_13_x86_64.whl (202.5 kB 查看哈希值)

上传时间: CPython 3.12 Windows x86-64

isal-1.7.1-cp312-cp312-musllinux_1_2_x86_64.whl (264.7 kB 查看哈希值)

上传时间: CPython 3.12 musllinux: musl 1.2+ x86-64

isal-1.7.1-cp312-cp312-musllinux_1_2_aarch64.whl (233.2 kB 查看哈希值)

上传时间: CPython 3.12 musllinux: musl 1.2+ ARM64

isal-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.2 kB 查看哈希值)

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

isal-1.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (232.4 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ ARM64

isal-1.7.1-cp312-cp312-macosx_11_0_arm64.whl (188.5 kB 查看哈希值)

上传时间 CPython 3.12 macOS 11.0+ ARM64

isal-1.7.1-cp312-cp312-macosx_10_13_x86_64.whl (237.0 kB 查看哈希值)

上传时间 CPython 3.12 macOS 10.13+ x86-64

isal-1.7.1-cp311-cp311-win_amd64.whl (202.3 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

isal-1.7.1-cp311-cp311-musllinux_1_2_x86_64.whl (264.5 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.2+ x86-64

isal-1.7.1-cp311-cp311-musllinux_1_2_aarch64.whl (233.0 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.2+ ARM64

isal-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (258.9 kB 查看哈希值)

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

isal-1.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (232.3 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ ARM64

isal-1.7.1-cp311-cp311-macosx_11_0_arm64.whl (188.4 kB 查看哈希值)

上传时间 CPython 3.11 macOS 11.0+ ARM64

isal-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl (236.8 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ x86-64

isal-1.7.1-cp310-cp310-win_amd64.whl (202.3 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

isal-1.7.1-cp310-cp310-musllinux_1_2_x86_64.whl (264.4 kB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.2+ x86-64

isal-1.7.1-cp310-cp310-musllinux_1_2_aarch64.whl (233.0 kB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.2+ ARM64

isal-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (258.9 kB 查看哈希值)

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

isal-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (232.3 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ ARM64

isal-1.7.1-cp310-cp310-macosx_11_0_arm64.whl (188.4 kB 查看哈希值)

上传时间 CPython 3.10 macOS 11.0+ ARM64

isal-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl (236.8 kB 查看哈希值)

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

isal-1.7.1-cp39-cp39-win_amd64.whl (202.3 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

isal-1.7.1-cp39-cp39-musllinux_1_2_x86_64.whl (264.4 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ x86-64

isal-1.7.1-cp39-cp39-musllinux_1_2_aarch64.whl (233.0 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ ARM64

isal-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (258.9 kB 查看哈希值)

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

isal-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (232.3 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ ARM64

isal-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl (236.8 kB 查看哈希值)

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

isal-1.7.1-cp38-cp38-win_amd64.whl (202.4 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

isal-1.7.1-cp38-cp38-musllinux_1_2_x86_64.whl (264.5 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.2+ x86-64

isal-1.7.1-cp38-cp38-musllinux_1_2_aarch64.whl (233.1 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.2+ ARM64

isal-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.0 kB 查看哈希值)

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

isal-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (232.4 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ ARM64

isal-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl (236.8 kB 查看哈希值)

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

由以下支持

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