如何检测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.8
、zlib
将作为依赖项安装。
- 另一种方法是从源代码安装 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
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.8
、zlib
将作为依赖项安装。 - 另一种方法是从源代码安装 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