Python 3.3的'lzma'模块的后向移植,用于XZ/LZMA压缩文件。
项目描述
简介
Python 3.3及以上版本的标准库中包含模块 lzma,提供通过XZ Utils C库(XZ Utils在某种程度上是LZMA v2)与LZMA和XZ压缩文件一起工作的支持。请参阅
Python的lzma - https://docs.pythonlang.cn/dev/library/lzma.html
XZ Utils - http://tukaani.org/xz/
此代码是Python 3.3标准库模块 lzma 的后向移植,用于在未包含此模块的较旧版本的Python上使用。它可以从PyPI(仅限发布下载)和GitHub(仓库)获取
有一些较旧的Python库,如PylibLZMA和PyLZMA,但这两个都使用LZMA Utils(不是XZ Utils,因此没有XZ支持)。
PylibLZMA - http://pypi.python.org/pypi/pyliblzma
PyLZMA - http://pypi.python.org/pypi/pylzma/
LZMA Utils - http://tukaani.org/lzma/
支持的平台
Python 3.3附带的lmza模块应在所有主流操作系统上工作,因此理论上这次回溯也应该如此。
Mac OS X:在Python 2.6、2.7、3.0至3.4版本下进行了测试。
Linux:在Python 2.6、2.7、3.0至3.6版本下进行了测试。
Windows:在Python 2.7、3.6版本下进行了测试,涵盖32位和64位,以及MSVC和mingw32编译器。
除了对某些错误异常的一些小改动外,基于单元测试,一切似乎都运行正常。
Python 2.6和2.7的支持看起来运行良好,因为所有适当的单元测试现在都通过了。支持Python 2的旧版本可能需要太多工作。
我们现在还支持Python 2.7的PyPy实现,目前测试的是PyPy 5.8.0。它目前不支持Python 3的PyPy实现,但标准库模块中已经有了lzma。
安装
我推荐使用支持Linux、MacOS和Windows的Conda打包系统。感谢conda-forge包,您应该能够用一行命令安装这个库,并自动处理依赖关系。
$ conda install -c conda-forge backports.lzma
如果您使用的是Linux,系统包很可能包含这个库并处理依赖关系,例如,在RedHat/CentOS上尝试:
$ sudo yum install python-backports-lzma
否则,您必须首先安装XZ Utils C库。在RedHat或CentOS Linux系统上,尝试:
$ sudo yum install xz-devel
在基于Debian的Linux发行版上使用:
$ sudo apt-get install liblzma-dev
否则,您可以从源代码开始安装,这是我在Mac OS X上所做的。
$ curl -L -O http://tukaani.org/xz/xz-5.0.4.tar.gz $ tar -zxvf xz-5.0.4.tar.gz $ cd xz-5.0.4 $ ./configure --prefix=$HOME $ make $ make check $ make install
现在您可以为这个lzma回溯安装。如果您使用pip,这应该会工作:
$ pip install backports.lzma
否则,您可以按照老式方法编译。首先下载并解压源代码,或克隆GitHub仓库:
$ git clone git://github.com/peterjc/backports.lzma.git $ cd backports.lzma $ python setup.py install $ cd test $ python test_lzma.py
为了安装特定版本的Python,在上面的命令中将python(它将使用系统默认的Python)替换为特定版本,如python2、python2.6、python3、python3.2等。
这将自动找到XZ Util头文件和库(并将在您的家目录下检查本地安装)。现在您应该能够按照以下方式从Python导入回溯。
如果您尝试在系统Python下安装,您需要管理员权限,并将“python setup.py install”替换为“sudo python setup.py install”。
使用方法
如果您想要优先使用提供的标准库lzma(如果存在),预期的使用方法如下:
try: import lzma except ImportError: from backports import lzma #Then use lzma as normal, for example: assert b"Hello!" == lzma.decompress(lzma.compress(b"Hello!"))
请参阅在线的lzma文档:[https://docs.pythonlang.cn/dev/library/lzma.html](https://docs.pythonlang.cn/dev/library/lzma.html)
请注意,虽然lzma应该在Python 3.3及以后版本中可用,但您仍然可以安装回溯。这有两个原因,首先测试这两个版本的行为是否相同,其次,您的Python安装可能缺少标准库lzma。如果Python是从源代码安装的,而XZ Utils不可用,则可能会发生这种情况。如果这是一个系统级别的Python安装,那么作为用户,您仍然可以在自己的账户下安装XZ Utils和这个回溯。
这是使用Brandon Rhodes在此处介绍的共享backports命名空间:[http://pypi.python.org/pypi/backports/](http://pypi.python.org/pypi/backports/) 和 [http://bitbucket.org/brandon/backports](http://bitbucket.org/brandon/backports)
修订
- v0.0.1 - 2013年1月
首次公开发布
- v0.0.2 - 2013年4月
修复Python 2上的可寻址属性(Tomer Chachamu)
更多lib/include头文件的搜索路径(Wynn Wilkes)
- v0.0.3 - 2014年6月
支持Python 2上的Unicode文件名(Irving Reid)
- v0.0.4 - 2014年9月
声明命名空间包以避免警告(Ralph Bean)(后来由于与setuptools和distutils的安装问题而被从PyPI撤回,请参阅GitHub问题#8和#9)。
- v0.0.5 - 2016年6月
将Python问题19839的修复移植到忽略非LZMA尾部数据(由Nadeem Vawda在Python 3.5.1中提供的原始补丁,由Deroko移植,请参阅GitHub拉取请求#5)。
- v0.0.6 - 2016年6月
更新命名空间打包声明,现在由setuptools的更新版本所要求,这阻止了从PyPI简单安装v0.0.4和v0.0.5。
- v0.0.7 - 2017年2月
在安装时检查并优先使用sys.prefix以查找lib和include头文件(John Kirkham)。
- v0.0.8 - 2017年2月
切换到使用README.rst来显示此文档,以便在PyPI上显示得更好。
- v0.0.9 - 2018年1月3日
现在在Windows下编译通过测试,已在AppVeyor上检查(请参阅由Nehal J Wani提供的GitHub拉取请求#25)。
- v0.0.10 - 2018年1月8日
现在支持PyPy(特别是他们的Python 2实现,但尚未支持pypy3,后者实现Python 3;请参阅Michał Górny提供的GitHub拉取请求#27和#29)。
- v0.0.11 - 2018年5月16日
应解决v0.0.4、v0.0.5和v0.0.6中与setuptools中存在的问题有关的命名空间问题,并导致与其他移植产生副作用(请参阅来自Toshio Kuratomi的拉取请求#32以及问题#8、#16和#28)。
- v0.0.12 - 2018年6月30日
修复了Python 3下setup.py中的区域设置问题(请参阅Ben Hearsum报告的#33)。
- v0.0.13 - 2018年7月11日
如果可用,使用setuptools而不是distutils,这对于编译自己的wheel或egg文件很有用(请参阅来自@wiggin15的#34)。
- v0.0.14 - 2019年9月12日
将使用FORMAT_ALONE解压缩文件而不使用结束标记的修复移植回来(请参阅Ma Kin的#40和Python问题21872)。
贡献者
Python lzma模块的初始实现是由Per Øyvind Karlsen完成的,然后由Nadeem Vawda重写并包含在Python 3.3中。在此基础上,Peter Cock将其移植到也适用于Python 2.6、2.7和3.0、3.1和3.2。
后续的贡献者包括:Tomer Chachamu、Wynn Wilkes、Irving Reid、Ralph Bean、Deroko、John Kirkham、Nehal J Wani、Michał Górny、Toshio Kuratomi、Ma Lin。
错误报告
请通过GitHub问题跟踪器报告任何可复现的错误,网址为https://github.com/peterjc/backports.lzma/issues,包括有关您的操作系统、Python版本、XY Utils、lzma移植等详细信息。可复现的测试用例特别有帮助。
如果您可以证明在此移植中存在问题,但在Python 3.3或更高版本中包含的lzma模块中不存在,那么这显然是我们需要解决的问题。
有关Python 3.3或更高版本中捆绑的lzma模块的问题应报告给Python项目,网址为http://bugs.python.org(我们希望将任何官方修复应用到移植中)。
发布过程
版本在文件backports/lzma/__init__.py中递增(在运行时,setup.py将从该文件中提取它)。
在本地和TravisCI(见下文)测试后,新版本将按以下方式在git中标记
$ git tag backports.lzma.vX.X.X
必须显式将标记推送到GitHub
$ git push origin master --tags
然后我将使用以下方式将新版本上传到Python打包索引(PyPI)
$ python setup.py sdist $ twine upload dist/backports.lzma-X.X.X.tar.gz
如果尚未安装,请尝试 pip install twine。
自动化测试
在 Linux 下使用 TravisCI 进行持续集成测试,请参阅 https://travis-ci.org/peterjc/backports.lzma
同样,在 Windows 下使用 AppVeyor 进行测试,请参阅:https://ci.appveyor.com/project/peterjc/backports-lzma/history
项目详情
backports.lzma-0.0.14.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 16d8b68e4d3cd4e6c9ddb059850452946da3914c8a8e197a7f2b0954559f2df4 |
|
MD5 | ce194b48429f51778e2c391ca4fd1fd4 |
|
BLAKE2b-256 | 210f1a9990233076d48aa2084100ba289ca162975e73a688f3a56c0ee2bb441a |