This code is a backport of the Python 3.3 standard library module lzma for
use on older versions of Python where it was not included. It is available
from PyPI (released downloads only) and GitHub (repository):

Other than some minor changes in the exceptions for some errors, based on the
unit tests everything seems to be working fine.

Support under Python 2.6 and 2.7 appears to be working in that all the
appropriate unit tests now pass. Supporting older verions of Python 2 is
probably going to be too much work.

We now also support the PyPy implementation of Python 2.7, currently tested
with PyPy 5.8.0. It does not currently work on the PyPy implementation of
Python 3, but that comes with the lzma standard library module anyway.

Installation

I recommend the Conda packaging system which supports Linux, MacOS and
Windows. Thanks to the conda-forge package you should be able to install
this library with one line, and have the dependencies handled automatically:

$ conda install -c conda-forge backports.lzma

If you are on Linux, there is a good chance that the system packages will
include this library and handle the dependencies, e.g. on RedHat/CentOS try:

$ sudo yum install python-backports-lzma

Otherwise, first you must install the XZ Utils C library. On RedHat or
CentOS Linux sytems, try:

To install for a specific version of Python, replace python (which will
use the system’s default Python) in the above with a specific version like
python2, python2.6 or python3, python3.2, etc.

This should find the XZ Util header file and library automatically (and will
check for a local install under your home directory). You should now be able
to import the backport from Python as shown below.

If you are trying to install this under the system Python, you will need
admin rights and replace python setup.py install with
sudo python setup.py install instead.

Usage

The expected usage is as follows if you want to prioritise the standard
library provided lzma if present:

Note that while lzma should be available on Python 3.3, you can still
install the backport. This is useful for two reasons, first testing the two
act the same way, and second it is possible that your Python installation
lacks the standard library lzma. This can happen if Python was installed
from source and XZ Utils was not available. If this was a systems level Python
install, as a user you could still install XZ Utils and this backport under
your own account.

Now supports PyPy (specifically their Python 2 implementation, but not
yet pypy3 which implements Python 3; see GitHub pull requests #27 and
#29 by Michał Górny).

v0.0.11 - 16 May 2018

Should address namespace issues in v0.0.4, v0.0.5 and v0.0.6 related to
a problem in setuptools, and causing side effects with other backports
(see pull request #32 from Toshio Kuratomi, and issues #8, #16 and #28).

Contributors

The initial Python lzma module implementation was by Per Øyvind Karlsen, which
was then rewritten by Nadeem Vawda and included with Python 3.3. Based on this
work, it was backported to also run on Python 2.6, 2.7 and 3.0, 3.1 and 3.2 by
Peter Cock.

If you can demonstrate a problem in this backport but not in the lzma
module included with Python 3.3 or later, then it is clearly something we
will need to fix.

Any issues in the lzma module as bundled with Python 3.3 or later
should be reported to the Python project at http://bugs.python.org instead
(and we can hopefully apply any official fix to the backport as well).

Release Process

The version is incremented in file backports/lzma/__init__.py (from where
setup.py will extract it at runtime).

After testing locally and with TravisCI (see below), new releases are tagged
in git as follows:

$ git tag backports.lzma.vX.X.X

Tags must explicitly be pushed to GitHub:

$ git push origin master --tags

I then use the following to upload a new release to the Python Packaging Index
(PyPI):