Skip to content
Python interface to libarchive
Branch: master
Clone or download


A Python interface to libarchive. It uses the standard ctypes module to dynamically load and access the C library.


pip install libarchive-c



python-libarchive-c is currently tested with python 2.7, 3.4, 3.5, and 3.6.

If you find an incompatibility with older versions you can send us a small patch, but we won't accept big changes.


python-libarchive-c may not work properly with obsolete versions of libarchive such as the ones included in MacOS. In that case you can install a recent version of libarchive (e.g. with brew install libarchive on MacOS) and use the LIBARCHIVE environment variable to point python-libarchive-c to it:

export LIBARCHIVE=/usr/local/Cellar/libarchive/3.3.3/lib/libarchive.13.dylib



import libarchive

To extract an archive to the current directory:


extract_memory extracts from a buffer instead, and extract_fd extracts from a file descriptor.

To read an archive:

with libarchive.file_reader('test.7z') as archive:
    for entry in archive:
        for block in entry.get_blocks():

memory_reader reads from a memory buffer instead, and fd_reader reads from a file descriptor.

To create an archive:

with libarchive.file_writer('test.tar.gz', 'ustar', 'gzip') as archive:
    archive.add_files('libarchive/', 'README.rst')

memory_writer writes to a memory buffer instead, fd_writer writes to a file descriptor, and custom_writer sends the data to a callback function.

You can also find more thorough examples in the tests/ directory.


CC0 Public Domain Dedication

You can’t perform that action at this time.