{"library":"stream-unzip","title":"Stream-unzip","type":"library","description":"Stream-unzip is a Python library (version 0.0.101) designed to efficiently decompress ZIP archives without loading the entire file or any of its uncompressed contents into memory. It focuses on streaming capabilities, making it suitable for large files or network-bound operations. The library is actively maintained with regular releases and supports various ZIP formats including Deflate64, Zip64, and both AES and legacy ZipCrypto encryption.","language":"python","status":"active","last_verified":"Fri May 22","install":{"commands":["pip install stream-unzip"],"cli":{"name":"stream-unzip","version":"sh: 1: stream-unzip: not found"}},"imports":["from stream_unzip import stream_unzip"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/uktrade/stream-unzip","docs":"https://stream-unzip.docs.trade.gov.uk/","changelog":null,"pypi":"https://pypi.org/project/stream-unzip/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"import httpx\nimport os\nfrom stream_unzip import stream_unzip\n\ndef get_zipped_chunks(url):\n    # Ensure httpx is installed: pip install httpx\n    # Example URL for a small test zip if not set:\n    # url = url or 'https://www.learningcontainer.com/wp-content/uploads/2020/07/sample-zip-file.zip'\n    with httpx.stream('GET', url, follow_redirects=True) as r:\n        r.raise_for_status()\n        yield from r.iter_bytes(chunk_size=65536)\n\ndef main():\n    # Replace with a real ZIP file URL or use a local file stream\n    zip_url = os.environ.get('STREAM_UNZIP_TEST_URL', 'https://www.learningcontainer.com/wp-content/uploads/2020/07/sample-zip-file.zip')\n    print(f\"Downloading and unzipping from: {zip_url}\")\n    for file_name, file_size, unzipped_chunks in stream_unzip(get_zipped_chunks(zip_url)):\n        print(f\"\\nProcessing file: {file_name.decode('utf-8')} (Size: {file_size if file_size is not None else 'Unknown'} bytes)\")\n        total_unzipped_bytes = 0\n        # IMPORTANT: unzipped_chunks *must* be iterated to completion\n        for chunk in unzipped_chunks:\n            total_unzipped_bytes += len(chunk)\n            # Process the chunk, e.g., write to disk or another stream\n            # print(f\"  Read {len(chunk)} bytes from {file_name.decode('utf-8')}\")\n        print(f\"  Finished reading {total_unzipped_bytes} bytes for {file_name.decode('utf-8')}\")\n\nif __name__ == '__main__':\n    main()","lang":"python","description":"This quickstart demonstrates how to stream-unzip a ZIP file downloaded via HTTPX. The `stream_unzip` function takes an iterable of bytes (representing the ZIP archive) and yields tuples for each file: `(file_name, file_size, unzipped_bytes_generator)`. The `unzipped_bytes_generator` for each file *must* be iterated to completion to avoid `UnfinishedIterationError`.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-22","installed_version":"0.0.101","pypi_latest":"0.0.101","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.3,"avg_import_s":0.25,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.14,"mem_mb":5.4,"disk_size":"28.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.3,"import_time_s":0.1,"mem_mb":5.4,"disk_size":"30M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.23,"mem_mb":6.7,"disk_size":"31.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.3,"import_time_s":0.2,"mem_mb":6.7,"disk_size":"34M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.41,"mem_mb":8.3,"disk_size":"23.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.39,"mem_mb":8.3,"disk_size":"25M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.43,"mem_mb":8.8,"disk_size":"23.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.2,"import_time_s":0.39,"mem_mb":8.8,"disk_size":"25M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.12,"mem_mb":5.3,"disk_size":"28.4M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"stream-unzip","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.7,"import_time_s":0.14,"mem_mb":5.3,"disk_size":"30M"}]}}