stream-zip
Python function to construct a ZIP archive on the fly - without having to store the entire ZIP in memory or disk. This is useful in memory-constrained environments, or when you would like to start returning compressed data before you've even retrieved all the uncompressed data. Generating ZIPs on-demand in a web server is a typical use case for stream-zip.
Offers similar functionality to zipfly, but with a different API, and does not use Python's zipfile module under the hood.
To unZIP files on the fly try stream-unzip.
Installation
pip install stream-zip
Usage
from datetime import datetime
from stream_zip import stream_zip
def unzipped_files():
modified_at = datetime.now()
perms = 0o600
def file_1_data():
yield b'Some bytes'
def file_2_data():
yield b'Some bytes'
yield 'my-file-1.txt', modified_at, perms, file_1_data()
yield 'my-file-2.txt', modified_at, perms, file_2_data()
for zipped_chunk in stream_zip(unzipped_files()):
print(zipped_chunk)
Limitations
It's not possible to completely stream-write ZIP files. Small bits of metadata for each member file, such as its name, must be placed at the end of the ZIP. In order to do this, stream-unzip buffers this metadata in memory until it can be output.