A Python wrapper around bit7z for creating and extracting 7-zip archives, with bundled external codec and format plugins.
- Compression & extraction of 7z, zip, tar, gzip, bzip2, xz, wim archives (writing); reading support for 60+ formats (rar, iso, cab, chm, nsis, vmdk, vhdx, squashfs, and more).
- Bundled external plugins — zstd, brotli, lz4, lz5, lizard, flzma2, bsc, and zpaq codecs/formats are packaged with the wheel and loaded automatically.
- In-memory operations — compress/extract directly to/from
bytesbuffers and strings. - Archive metadata — inspect items count, sizes, CRC, and per-item properties.
- Encryption — password-protected archives with optional header encryption (7z).
- Solid archives, multi-volume splitting, compression levels & methods, custom dictionary/word sizes, multi-threading.
- Command-line interface —
pybit7zCLI for compress / decompress / extract / list / test / info / update. - Python 3.9+ on Windows, macOS, and Linux (including musllinux).
Install from PyPI:
pip install pybit7zAll operations require a Bit7zLibrary instance. Use the lib7zip_context() context manager, which locates the bundled lib7zip and external plugins automatically:
import pybit7z
with pybit7z.lib7zip_context() as lib:
...import pybit7z
try:
with pybit7z.lib7zip_context() as lib:
extractor = pybit7z.BitFileExtractor(lib, pybit7z.FormatSevenZip)
extractor.extract("path/to/archive.7z", "out/dir/")
# Extracting a specific file inside an archive
extractor.extract_matching("path/to/archive.7z", "file.pdf", "out/dir/")
# Extracting the first file of an archive to a buffer
buffer: bytes = extractor.extract("path/to/archive.7z")
# Extracting an encrypted archive
extractor.set_password("password")
extractor.extract("path/to/another/archive.7z", "out/dir/")
except pybit7z.BitException as e:
... # handle the exceptionWork on a single archive:
import pybit7z
try:
with pybit7z.lib7zip_context() as lib:
# Opening the archive
archive = pybit7z.BitArchiveReader(lib, "path/to/archive.gz", pybit7z.FormatGZip)
# Testing the archive
archive.test()
# Extracting the archive
archive.extract_to("out/dir/")
except pybit7z.BitException as e:
... # handle the exceptionimport pybit7z
try:
with pybit7z.lib7zip_context() as lib:
compressor = pybit7z.BitFileCompressor(lib, pybit7z.FormatSevenZip)
files = ["path/to/file1.jpg", "path/to/file2.pdf"]
# Creating a simple zip archive
compressor.compress(files, "output_archive.zip")
# Creating a zip archive with a custom directory structure
files_map: dict[str, str] = {
"path/to/file1.jpg": "alias/path/file1.jpg",
"path/to/file2.pdf": "alias/path/file2.pdf",
}
compressor.compress(files_map, "output_archive2.zip")
# Compressing a directory
compressor.compress_directory("dir/path/", "dir_archive.zip")
# Creating an encrypted zip archive of two files
compressor.set_password("password")
compressor.compress_files(files, "protected_archive.zip")
# Updating an existing zip archive
compressor.set_update_mode(pybit7z.UpdateMode.Append)
compressor.compress_files(files, "existing_archive.zip")
# Compressing a single file into a buffer
compressor2 = pybit7z.BitFileCompressor(lib, pybit7z.FormatBZip2)
buffer: bytes = compressor2.compress_file(files[0])
except pybit7z.BitException as e:
... # handle the exceptionWork on a single archive:
import pybit7z
try:
with pybit7z.lib7zip_context() as lib:
archive = pybit7z.BitArchiveWriter(lib, pybit7z.FormatSevenZip)
# Adding the items to be compressed (no compression is performed here)
archive.add_file("path/to/file.txt")
archive.add_directory("path/to/dir/")
# Compressing the added items to the output archive
archive.compress_to("output.7z")
except pybit7z.BitException as e:
... # handle the exceptionimport pybit7z
try:
with pybit7z.lib7zip_context() as lib:
arc = pybit7z.BitArchiveReader(lib, "archive.7z", pybit7z.FormatSevenZip)
# Printing archive metadata
print(
"Archive properties:",
"\n Items count: ",
arc.items_count(),
"\n Folders count: ",
arc.folders_count(),
"\n Files count: ",
arc.files_count(),
"\n Size: ",
arc.size(),
"\n Packed size: ",
arc.pack_size(),
)
# Printing the metadata of the archived items
print("Archived items")
for item in arc:
print(
" Item index: ",
item.index(),
"\n Name: ",
item.name(),
"\n Extension: ",
item.extension(),
"\n Path: ",
item.path(),
"\n IsDir: ",
item.is_dir(),
"\n Size: ",
item.size(),
"\n Packed size: ",
item.pack_size(),
"\n CRC: ",
item.crc(),
)
except pybit7z.BitException as e:
... # handle the exceptionA complete API reference is available in the documentation.
pybit7z ships a command-line tool for everyday archive tasks:
# Compress
pybit7z compress file.txt -o out.7z
pybit7z compress dir/ -o out.zip -f zip -l Ultra
# Extract
pybit7z extract archive.7z -o out_dir/
pybit7z decompress archive.tar.gz -o out_dir/
# List / test
pybit7z list archive.7z
pybit7z test archive.7z
# Show supported formats and codecs
pybit7z infoRun pybit7z --help for the full option list (passwords, compression method, threads, volumes, filtering, stdin/stdout piping, and more).
pybit7z bundles the full 7-zip format/codec set plus additional external plugins.
Run pybit7z info to see the exact list available in your build.
7z, zip, tar, gzip, bzip2, xz, wim
7z, zip, tar, gzip, bzip2, xz, z, lzma, lzma86, apfs, arj, cab, chm, cpio, cramfs, dmg, elf, ext, fat, flv, gpt, hfs, ihex, iso, lzh, macho, mbr, mslz, mub, ntfs, pe, coff, te, ppmd, qcow, rar, rar5, rpm, squashfs, swf, swfc, uefic, vdi, vhd, vhdx, vmdk, xar, udf, wim, nsis, split, and more.
| Plugin | Type | Description |
|---|---|---|
| zstd | format + codec | Zstandard compression |
| brotli | format + codec | Brotli compression |
| lz4 | format + codec | LZ4 compression |
| lz5 | format + codec | LZ5 compression |
| lizard | format + codec | Lizard (LZ5) compression |
| flzma2 | codec | Fast LZMA2 |
| bsc | codec | BSC (libbsc) compression |
| zpaq | codec | ZPAQ compression |
These are packaged inside the wheel and loaded automatically; no extra installation is required.
The build uses scikit-build-core + CMake + vcpkg (with custom overlay ports for bit7z and the external codec plugins).
- Python 3.9+
- CMake ≥ 3.20
- Ninja
- A C++17 compiler (MSVC on Windows, GCC/Clang on Linux/macOS)
- uv (recommended) or pip
# Editable install with verbose build output
uv pip install -e . -vThe build downloads and compiles 7-zip, bit7z, and the bundled codec plugins via vcpkg. This may take several minutes the first time.
uv pip install -e ".[test]"
pytestThe project uses pre-commit hooks for linting and formatting:
pre-commit install
pre-commit run -aApache Software License 2.0, for more details, see the LICENSE file.