如何检测zlib是否可用以及ZIP_DEFLATED是否可用?

zvo*_*one 9 python zlib

zipfile.ZipFile文件说,ZIP_DEFLATED可以用作仅在压缩方法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:
    ...
Run Code Online (Sandbox Code Playgroud)

ale*_*ame 10

  • 在 Ubuntu 上,如果您使用 apt 安装 Python 3,例如sudo apt install python3.8zlib将作为依赖项安装。
  • 另一种方法是从源代码安装 Python 3。在这种情况下,您需要安装所有先决条件,包括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
Run Code Online (Sandbox Code Playgroud)

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

try:
    import zlib # We may need its compression method
    crc32 = zlib.crc32
except ImportError:
    zlib = None
    crc32 = binascii.crc32
Run Code Online (Sandbox Code Playgroud)