如何检测zlib是否可用,ZIP_DEFLATED是否可用?

How to detect whether zlib is available and whether ZIP_DEFLATED is available?

zipfile.ZipFile documentation says that ZIP_DEFLATED can be used as compression method only if zlib 可用,但 zipfile 模块规范和 zlib 模块规范均未说明 zlib 何时可能不可用,或如何检查它的可用性。

我在 Windows 上工作,当我安装任何版本的 Python 时,zlib 模块可用。这在 Linux 中有什么不同吗? zlib是否需要单独安装?

此外,检查 zlib 可用性的正确方法是什么?如果 import zlib 不可用,是否会提出 ImportError

换句话说,这是使用 zipfile 的正确方法吗?

try:
    import zlib
except ImportError:
    zlib = None

compression = zipfile.ZIP_STORED if zlib is None else zipfile.ZIP_DEFLATED

with zipfile.ZipFile(file, mode, compression) as zf:
    ...
  • On Ubuntu 如果您使用 apt 安装 Python 3,例如sudo apt install python3.8zlib 将作为依赖项安装。
  • 另一种方法是从源代码安装 Python3。在这种情况下,您需要安装所有先决条件,包括 zlib1g-dev,(有时会忘记执行此操作) 然后将 python 编译并安装为 sudo make install。完整说明
  • 是的,如果 zlib 不可用 import zlib 将引发异常,例如
>>> import zlib 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'zlib

Python标准中有这样的代码示例 图书馆。例如在 zipfile.py:

try:
    import zlib # We may need its compression method
    crc32 = zlib.crc32
except ImportError:
    zlib = None
    crc32 = binascii.crc32