LZO 是致力于解压速度的一种数据压缩算法,LZO 是 Lempel-Ziv-Oberhumer 的缩写。LZO是一个无损的数据压缩库,相比于压缩比它更加追求速度。最初的库是用 ANSI C 编写、并且遵从 GNU通用公共许可证发布的。
开发人员常用的python环境,是搭建在windows系统上的,而要使用lzo压缩工具,就需要先安装lzo工具,再安装python-lzo插件(用于调用lzo),最后在python项目中import lzo,实现相关压缩解压缩操作。现将操作步骤整理如下,供大家参考。
目前,lzo工具的最新版本是2.10,而python-lzo的最新版本是1.12,并且python-lzo对应版本已有一年多时间没有更新。笔者在安装时,由于开始没注意版本问题(均使用最新版本),导致多次编译安装失败,最后才发现是由于版本不支持。
因python-lzo插件长时间未更新,对lzo工具目前只支持到lzo-2.09,所以我们要安装工具的最新版本,也只能使用python-lzo-1.12和lzo-2.09。
另外需要说明的是,安装lzo工具时需要使用VisualStudio2010编译器,对C语言程序代码进行编译,因此需要安装好VisualStudio2010编译器。
注意:VisualStudio使用的是2010版编译器。使用2010版的原因是,lzo-2.09版本发布较早,使用2015、2016、2019等进行编译时,因编译器版本问题会导致编译出错,出现如下图的错误:
下载lzo安装包
访问地址(http://www.oberhumer.com/opensource/lzo/download/),下载lzo工具的安装包。
解压缩安装包
在windows环境下使用解压缩工具,解压下载号的压缩包。
文件夹B:包含了 DOS、windows 等系统的支持文件。
文件夹examples:包含了示例程序代码。
文件夹include:包含了公共头文件。
文件夹minilzo:包含了LZO算法一种简化版。
文件夹src:包含了LZO源码。
文件夹util:包含了一些涉及到的脚本。
编译C程序
linux环境中lzo编译安装方法,可参考lzo-2.09文件夹中的INSTALL文件;windows环境编译安装方法,可参考lzo-2.09\B\00README.TXT。
在“开始”菜单中打开Visual Studio x64 Win64命令行工具,执行B\win64文件夹下的bat脚本,具体如下命令:
cd lzo-2.09
.\B\win64\vc.bat
当看到Building LZO was successful. All done.时,说明lzo工具编译安装成功。
lzotest.exe -mlzo COPYING
下载python-lzo安装包
访问地址(https://pypi.org/project/python-lzo/1.12/#files)下载python-lzo插件安装包。
安装python包
在python-lzo的解压缩目录下,打开CMD命令行窗口,然后执行命令:python setup.py install。安装完成后,会在python安装目录\Lib\site-packages下,形成编译好的lzo.cp37-win_amd64.pyd文件(类似于dll文件)。
为了方便安装使用lzo工具,已将编译好的文件上传百度网盘,可直接下载使用。
lzo工具-https://pan.baidu.com/s/1jOOekUO00el_30e1ClBOkw,提取码:lnfs。解压缩后配置到系统环境变量中。
python-lzo插件-https://pan.baidu.com/s/136VQqA3AH4K6AozViAjNMA ,提取码:6ujo 。拷贝到python安装目录\Lib\site-packages下即可。
python-lzo的具体使用方法,可参考文件python-lzo-1.12\tests\test.py中的内容。
import lzo
a0 = lzo.adler32(src)
c = lzo.compress(src, level)#压缩
u1 = lzo.decompress(c)#解压缩
a1 = lzo.adler32(u1)
o = lzo.optimize(c)
u2 = lzo.decompress(o)
a2 = lzo.adler32(u2)
Traceback (most recent call last):
File "setup.py", line 46, in
raise Exception("please set LZO_DIR to where the lzo source lives")
Exception: please set LZO_DIR to where the lzo source lives
报错原因:在执行python setup.py install命令时,python-lzo-1.12会去扫描系统的环境变量,查找LZO_DIR中配置的lzo工具安装路径,如果没有配置环境变量或环境变量不一致,会报上述错误。
另外,python-lzo-1.11之前的版本,LZO_DIR路径是写死在setup.py文件中的,需要手动进行修改。如下图所示:
LINK : fatal error LNK1181: 无法打开输入文件“c:\lzo\lzo-2.09\lzo.lib”
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Communit
y\\VC\\Tools\\MSVC\\14.24.28314\\bin\\HostX86\\x64\\link.exe' failed with exit status 1181
报错原因:在安装lzo模块时,选择的C程序编译器版本与lzo工具版本不匹配,导致编译结果中缺失了lzo.lib文件。
lzomodule.c(35): fatal error C1083: 无法打开包括文件: “lzo/lzo1x.h”: No such f
ile or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Communit
y\\VC\\Tools\\MSVC\\14.24.28314\\bin\\HostX86\\x64\\cl.exe' failed with exit sta
tus 2
报错原因:lzo1x.h位于lzo工具安装目录include\lzo\下,python-lzo\lzomodule.c中可能存在应用错误,需要手动进行修改。如果不清楚相对路径,可将其改为绝对路径。
>>> import lzo
Traceback (most recent call last):
File "", line 1, in
import lzo
ModuleNotFoundError: No module named 'lzo'
报错原因:在执行python setup.py install命令时,相关C程序编译失败,导致未能生成python\Lib\site-packages\lzo.cp37-win_amd64.pyd文件。请检查安装版本是否匹配,进行编译时是否成功。
#参考资料
[1]LZO基本介绍与调试总结 https://blog.csdn.net/parasoft/article/details/84971788
[2]Windws安装python-lzo
https://kokufu.blogspot.com/2019/06/windows-python-lzo.html