跳转到主要内容

Python 3.3的'lzma'模块的后向移植,用于XZ/LZMA压缩文件。

项目描述

Package on Python Package Index (PyPI) Conda package from conda-forge channel Conda package from Anaconda (default) channel Linux testing with TravisCI Windows testing with AppVeyor PyPI downloads

简介

Python 3.3及以上版本的标准库中包含模块 lzma,提供通过XZ Utils C库(XZ Utils在某种程度上是LZMA v2)与LZMA和XZ压缩文件一起工作的支持。请参阅

此代码是Python 3.3标准库模块 lzma 的后向移植,用于在未包含此模块的较旧版本的Python上使用。它可以从PyPI(仅限发布下载)和GitHub(仓库)获取

有一些较旧的Python库,如PylibLZMA和PyLZMA,但这两个都使用LZMA Utils(不是XZ Utils,因此没有XZ支持)。

支持的平台

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)(后来由于与setuptoolsdistutils的安装问题而被从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以查找libinclude头文件(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

更新后将在 http://pypi.python.org/pypi/backports.lzma/ 显示

自动化测试

在 Linux 下使用 TravisCI 进行持续集成测试,请参阅 https://travis-ci.org/peterjc/backports.lzma

Linux testing with TravisCI

同样,在 Windows 下使用 AppVeyor 进行测试,请参阅:https://ci.appveyor.com/project/peterjc/backports-lzma/history

Windows testing with AppVeyor

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

backports.lzma-0.0.14.tar.gz (47.1 kB 查看哈希值)

源代码

支持者