Name | py7zz JSON |
Version |
1.1.1
JSON |
| download |
home_page | None |
Summary | Python wrapper for 7zz CLI tool providing cross-platform compression with multiple archive formats |
upload_time | 2025-09-07 15:06:30 |
maintainer | None |
docs_url | None |
author | py7zz contributors |
requires_python | >=3.8 |
license | MIT License
Copyright (c) 2025 py7zz contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
keywords |
7z
7zip
archive
compression
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<!--
SPDX-License-Identifier: MIT
SPDX-FileCopyrightText: 2025 py7zz contributors
-->
# py7zz
[](https://pypi.org/project/py7zz/)
[](https://pypi.org/project/py7zz/)
[](https://github.com/rxchi1d/py7zz/blob/main/LICENSE)
[](https://github.com/rxchi1d/py7zz/actions)
A Python wrapper for 7zz CLI tool providing cross-platform archive operations with built-in security protection, Windows filename compatibility, and comprehensive API support.
## Table of Contents
- [Features](#features)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [API Reference](#api-reference)
- [Advanced Features](#advanced-features)
- [Migration Guide](#migration-guide)
- [Contributing](#contributing)
- [License](#license)
## Features
- **Cross-platform**: Windows, macOS, Linux
- **50+ formats**: 7Z, ZIP, TAR, RAR, and more
- **API compatible**: Drop-in replacement for `zipfile`/`tarfile`
- **Windows compatibility**: Automatic filename sanitization
- **Security protection**: ZIP bomb detection and file count limits
- **Async support**: Non-blocking operations with progress
- **Zero dependencies**: Bundled 7zz binary
## Installation
```bash
pip install py7zz
```
For development:
```bash
git clone https://github.com/rxchi1d/py7zz.git
cd py7zz
pip install -e .
```
## Quick Start
### Basic Usage
```python
import py7zz
# Create archive
py7zz.create_archive('backup.7z', ['documents/', 'photos/'])
# Extract archive
py7zz.extract_archive('backup.7z', 'extracted/')
# List contents
with py7zz.SevenZipFile('backup.7z', 'r') as sz:
print(sz.namelist())
```
### Drop-in Replacement
```python
# OLD: zipfile
import zipfile
with zipfile.ZipFile('archive.zip', 'r') as zf:
zf.extractall('output/')
# NEW: py7zz (identical API)
import py7zz
with py7zz.SevenZipFile('archive.7z', 'r') as sz:
sz.extractall('output/')
```
### Async Operations
```python
import asyncio
import py7zz
async def main():
await py7zz.create_archive_async('backup.7z', ['data/'])
await py7zz.extract_archive_async('backup.7z', 'output/')
asyncio.run(main())
```
## API Reference
### Core Classes
#### `SevenZipFile(file, mode='r', preset=None)`
Main class for archive operations, compatible with `zipfile.ZipFile`.
**Parameters:**
- `file`: Path to archive
- `mode`: 'r' (read), 'w' (write), 'a' (append)
- `preset`: Compression preset ('fast', 'balanced', 'ultra')
**Methods:**
- `namelist()`: List all files
- `extractall(path, members)`: Extract files
- `add(name, arcname)`: Add file
- `read(name)`: Read file content
- `testzip()`: Test integrity
### Simple Functions
#### `create_archive(path, files, preset='balanced')`
Create archive from files.
#### `extract_archive(path, output_dir='.')`
Extract all files from archive.
#### `test_archive(path)`
Test archive integrity.
### Security Features
#### `SecurityConfig(max_file_count=5000, max_compression_ratio=100.0, max_total_size=10737418240)`
Configure security limits for archive processing.
#### `check_file_count_security(file_list, config=None)`
Check if archive file count exceeds security limits.
### Filename Utilities
#### `sanitize_filename(filename)`
Sanitize filename for Windows compatibility.
#### `is_valid_windows_filename(filename)`
Check if filename is valid on Windows.
#### `get_safe_filename(filename, existing_names=None)`
Get Windows-compatible filename with conflict resolution.
### Async API
#### `AsyncSevenZipFile`
Async version of SevenZipFile with identical methods.
#### `create_archive_async()`, `extract_archive_async()`
Async versions of simple functions.
### Configuration
#### Compression Presets
- `'fast'`: Quick compression
- `'balanced'`: Default
- `'ultra'`: Maximum compression
#### Logging
```python
py7zz.setup_logging('INFO') # Configure logging
py7zz.disable_warnings() # Hide warnings
```
### Exception Handling
py7zz provides specific exceptions for different error conditions:
```python
from py7zz.exceptions import (
ZipBombError, # Potential ZIP bomb detected
SecurityError, # Security limits exceeded
PasswordRequiredError, # Archive requires password
FileNotFoundError, # File or archive not found
CorruptedArchiveError # Archive is corrupted
)
try:
py7zz.extract_archive('archive.7z')
except ZipBombError:
print("Archive may be a ZIP bomb")
except PasswordRequiredError:
print("Archive is password protected")
except CorruptedArchiveError:
print("Archive is corrupted")
```
See [API Documentation](docs/API.md) for complete reference.
## Migration Guide
### From zipfile
```python
# Change import
import py7zz # was: import zipfile
# Change class name
with py7zz.SevenZipFile('archive.7z', 'r') as sz: # was: zipfile.ZipFile
sz.extractall() # Same API!
```
### From tarfile
```python
# Change import
import py7zz # was: import tarfile
# Use same class
with py7zz.SevenZipFile('archive.tar.gz', 'r') as sz: # was: tarfile.open
sz.extractall() # Same API!
```
See [Migration Guide](docs/MIGRATION.md) for detailed instructions.
## Supported Formats
| Format | Read | Write |
|--------|------|-------|
| 7Z | ✅ | ✅ |
| ZIP | ✅ | ✅ |
| TAR | ✅ | ✅ |
| RAR | ✅ | ❌ |
| GZIP | ✅ | ✅ |
| BZIP2 | ✅ | ✅ |
| XZ | ✅ | ✅ |
And 40+ more formats for reading.
## Advanced Features
### Security Protection
Built-in protection against malicious archives:
```python
from py7zz import SecurityConfig, ZipBombError
# Configure security limits
config = SecurityConfig(max_file_count=1000, max_compression_ratio=50.0)
try:
py7zz.extract_archive('suspicious.zip')
except ZipBombError as e:
print(f"Potential ZIP bomb detected: {e}")
```
### Windows Filename Compatibility
Automatically handles Windows restrictions and provides utilities:
```python
from py7zz import sanitize_filename, is_valid_windows_filename
# Auto-sanitization during extraction
py7zz.extract_archive('unix-archive.tar.gz') # Files sanitized automatically
# Manual filename utilities
safe_name = sanitize_filename("invalid<file>name.txt") # → "invalid_file_name.txt"
is_valid = is_valid_windows_filename("CON.txt") # → False
```
### Progress Monitoring
```python
async def progress_callback(info):
print(f"Progress: {info.percentage:.1f}%")
await py7zz.extract_archive_async('large.7z', progress_callback=progress_callback)
```
### Batch Operations
```python
archives = ['backup1.7z', 'backup2.7z', 'backup3.7z']
py7zz.batch_extract_archives(archives, 'output/')
```
## Development
### Setup
```bash
# Clone repository
git clone https://github.com/rxchi1d/py7zz.git
cd py7zz
# Install dependencies (development mode)
uv sync --dev
uv pip install -e .
```
### Testing
```bash
# Run tests
pytest
# Check code quality
ruff check .
mypy .
```
### Code Style
- Follow PEP 8
- Use type hints
- Maximum line length: 88
- Format with `ruff format`
## Requirements
- Python 3.8+
- No external dependencies
- Supported platforms:
- Windows x64
- macOS (Intel & Apple Silicon)
- Linux x86_64
## Version Information
py7zz follows [PEP 440](https://peps.python.org/pep-0440/) versioning standard:
```python
import py7zz
print(py7zz.get_version()) # py7zz version (e.g., "1.0.0")
print(py7zz.get_bundled_7zz_version()) # 7zz version
# Version types supported:
# - Stable: 1.0.0
# - Alpha: 1.0.0a1
# - Beta: 1.0.0b1
# - Release Candidate: 1.0.0rc1
# - Development: 1.0.0.dev1
```
## Contributing
We welcome contributions! See [Contributing Guide](CONTRIBUTING.md) for:
- Development setup
- Code style guidelines
- Commit conventions
- Pull request process
## Support
- **Documentation**: [API Reference](docs/API.md)
- **Issues**: [GitHub Issues](https://github.com/rxchi1d/py7zz/issues)
- **Discussions**: [GitHub Discussions](https://github.com/rxchi1d/py7zz/discussions)
## License
Python source code: MIT (see LICENSE)
Bundled runtime: 7-Zip 7zz under its own licenses (LGPL v2.1 + unRAR; parts BSD).
See THIRD_PARTY_NOTICES.md and licenses/7zip-LICENSE.txt.
## Acknowledgments
Built on [7-Zip](https://www.7-zip.org/) by Igor Pavlov.
Raw data
{
"_id": null,
"home_page": null,
"name": "py7zz",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "7z, 7zip, archive, compression",
"author": "py7zz contributors",
"author_email": null,
"download_url": null,
"platform": null,
"description": "<!--\nSPDX-License-Identifier: MIT\nSPDX-FileCopyrightText: 2025 py7zz contributors\n-->\n\n# py7zz\n\n[](https://pypi.org/project/py7zz/)\n[](https://pypi.org/project/py7zz/)\n[](https://github.com/rxchi1d/py7zz/blob/main/LICENSE)\n[](https://github.com/rxchi1d/py7zz/actions)\n\nA Python wrapper for 7zz CLI tool providing cross-platform archive operations with built-in security protection, Windows filename compatibility, and comprehensive API support.\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [API Reference](#api-reference)\n- [Advanced Features](#advanced-features)\n- [Migration Guide](#migration-guide)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Features\n\n- **Cross-platform**: Windows, macOS, Linux\n- **50+ formats**: 7Z, ZIP, TAR, RAR, and more\n- **API compatible**: Drop-in replacement for `zipfile`/`tarfile`\n- **Windows compatibility**: Automatic filename sanitization\n- **Security protection**: ZIP bomb detection and file count limits\n- **Async support**: Non-blocking operations with progress\n- **Zero dependencies**: Bundled 7zz binary\n\n## Installation\n\n```bash\npip install py7zz\n```\n\nFor development:\n```bash\ngit clone https://github.com/rxchi1d/py7zz.git\ncd py7zz\npip install -e .\n```\n\n## Quick Start\n\n### Basic Usage\n\n```python\nimport py7zz\n\n# Create archive\npy7zz.create_archive('backup.7z', ['documents/', 'photos/'])\n\n# Extract archive\npy7zz.extract_archive('backup.7z', 'extracted/')\n\n# List contents\nwith py7zz.SevenZipFile('backup.7z', 'r') as sz:\n print(sz.namelist())\n```\n\n### Drop-in Replacement\n\n```python\n# OLD: zipfile\nimport zipfile\nwith zipfile.ZipFile('archive.zip', 'r') as zf:\n zf.extractall('output/')\n\n# NEW: py7zz (identical API)\nimport py7zz\nwith py7zz.SevenZipFile('archive.7z', 'r') as sz:\n sz.extractall('output/')\n```\n\n### Async Operations\n\n```python\nimport asyncio\nimport py7zz\n\nasync def main():\n await py7zz.create_archive_async('backup.7z', ['data/'])\n await py7zz.extract_archive_async('backup.7z', 'output/')\n\nasyncio.run(main())\n```\n\n## API Reference\n\n### Core Classes\n\n#### `SevenZipFile(file, mode='r', preset=None)`\n\nMain class for archive operations, compatible with `zipfile.ZipFile`.\n\n**Parameters:**\n- `file`: Path to archive\n- `mode`: 'r' (read), 'w' (write), 'a' (append)\n- `preset`: Compression preset ('fast', 'balanced', 'ultra')\n\n**Methods:**\n- `namelist()`: List all files\n- `extractall(path, members)`: Extract files\n- `add(name, arcname)`: Add file\n- `read(name)`: Read file content\n- `testzip()`: Test integrity\n\n### Simple Functions\n\n#### `create_archive(path, files, preset='balanced')`\nCreate archive from files.\n\n#### `extract_archive(path, output_dir='.')`\nExtract all files from archive.\n\n#### `test_archive(path)`\nTest archive integrity.\n\n### Security Features\n\n#### `SecurityConfig(max_file_count=5000, max_compression_ratio=100.0, max_total_size=10737418240)`\nConfigure security limits for archive processing.\n\n#### `check_file_count_security(file_list, config=None)`\nCheck if archive file count exceeds security limits.\n\n### Filename Utilities\n\n#### `sanitize_filename(filename)`\nSanitize filename for Windows compatibility.\n\n#### `is_valid_windows_filename(filename)`\nCheck if filename is valid on Windows.\n\n#### `get_safe_filename(filename, existing_names=None)`\nGet Windows-compatible filename with conflict resolution.\n\n### Async API\n\n#### `AsyncSevenZipFile`\nAsync version of SevenZipFile with identical methods.\n\n#### `create_archive_async()`, `extract_archive_async()`\nAsync versions of simple functions.\n\n### Configuration\n\n#### Compression Presets\n- `'fast'`: Quick compression\n- `'balanced'`: Default\n- `'ultra'`: Maximum compression\n\n#### Logging\n```python\npy7zz.setup_logging('INFO') # Configure logging\npy7zz.disable_warnings() # Hide warnings\n```\n\n### Exception Handling\n\npy7zz provides specific exceptions for different error conditions:\n\n```python\nfrom py7zz.exceptions import (\n ZipBombError, # Potential ZIP bomb detected\n SecurityError, # Security limits exceeded\n PasswordRequiredError, # Archive requires password\n FileNotFoundError, # File or archive not found\n CorruptedArchiveError # Archive is corrupted\n)\n\ntry:\n py7zz.extract_archive('archive.7z')\nexcept ZipBombError:\n print(\"Archive may be a ZIP bomb\")\nexcept PasswordRequiredError:\n print(\"Archive is password protected\")\nexcept CorruptedArchiveError:\n print(\"Archive is corrupted\")\n```\n\nSee [API Documentation](docs/API.md) for complete reference.\n\n## Migration Guide\n\n### From zipfile\n\n```python\n# Change import\nimport py7zz # was: import zipfile\n\n# Change class name\nwith py7zz.SevenZipFile('archive.7z', 'r') as sz: # was: zipfile.ZipFile\n sz.extractall() # Same API!\n```\n\n### From tarfile\n\n```python\n# Change import\nimport py7zz # was: import tarfile\n\n# Use same class\nwith py7zz.SevenZipFile('archive.tar.gz', 'r') as sz: # was: tarfile.open\n sz.extractall() # Same API!\n```\n\nSee [Migration Guide](docs/MIGRATION.md) for detailed instructions.\n\n## Supported Formats\n\n| Format | Read | Write |\n|--------|------|-------|\n| 7Z | \u2705 | \u2705 |\n| ZIP | \u2705 | \u2705 |\n| TAR | \u2705 | \u2705 |\n| RAR | \u2705 | \u274c |\n| GZIP | \u2705 | \u2705 |\n| BZIP2 | \u2705 | \u2705 |\n| XZ | \u2705 | \u2705 |\n\nAnd 40+ more formats for reading.\n\n## Advanced Features\n\n### Security Protection\n\nBuilt-in protection against malicious archives:\n\n```python\nfrom py7zz import SecurityConfig, ZipBombError\n\n# Configure security limits\nconfig = SecurityConfig(max_file_count=1000, max_compression_ratio=50.0)\n\ntry:\n py7zz.extract_archive('suspicious.zip')\nexcept ZipBombError as e:\n print(f\"Potential ZIP bomb detected: {e}\")\n```\n\n### Windows Filename Compatibility\n\nAutomatically handles Windows restrictions and provides utilities:\n\n```python\nfrom py7zz import sanitize_filename, is_valid_windows_filename\n\n# Auto-sanitization during extraction\npy7zz.extract_archive('unix-archive.tar.gz') # Files sanitized automatically\n\n# Manual filename utilities\nsafe_name = sanitize_filename(\"invalid<file>name.txt\") # \u2192 \"invalid_file_name.txt\"\nis_valid = is_valid_windows_filename(\"CON.txt\") # \u2192 False\n```\n\n### Progress Monitoring\n\n```python\nasync def progress_callback(info):\n print(f\"Progress: {info.percentage:.1f}%\")\n\nawait py7zz.extract_archive_async('large.7z', progress_callback=progress_callback)\n```\n\n### Batch Operations\n\n```python\narchives = ['backup1.7z', 'backup2.7z', 'backup3.7z']\npy7zz.batch_extract_archives(archives, 'output/')\n```\n\n## Development\n\n### Setup\n\n```bash\n# Clone repository\ngit clone https://github.com/rxchi1d/py7zz.git\ncd py7zz\n\n# Install dependencies (development mode)\nuv sync --dev\nuv pip install -e .\n```\n\n### Testing\n\n```bash\n# Run tests\npytest\n\n# Check code quality\nruff check .\nmypy .\n```\n\n### Code Style\n\n- Follow PEP 8\n- Use type hints\n- Maximum line length: 88\n- Format with `ruff format`\n\n## Requirements\n\n- Python 3.8+\n- No external dependencies\n- Supported platforms:\n - Windows x64\n - macOS (Intel & Apple Silicon)\n - Linux x86_64\n\n## Version Information\n\npy7zz follows [PEP 440](https://peps.python.org/pep-0440/) versioning standard:\n\n```python\nimport py7zz\nprint(py7zz.get_version()) # py7zz version (e.g., \"1.0.0\")\nprint(py7zz.get_bundled_7zz_version()) # 7zz version\n\n# Version types supported:\n# - Stable: 1.0.0\n# - Alpha: 1.0.0a1\n# - Beta: 1.0.0b1\n# - Release Candidate: 1.0.0rc1\n# - Development: 1.0.0.dev1\n```\n\n## Contributing\n\nWe welcome contributions! See [Contributing Guide](CONTRIBUTING.md) for:\n\n- Development setup\n- Code style guidelines\n- Commit conventions\n- Pull request process\n\n## Support\n\n- **Documentation**: [API Reference](docs/API.md)\n- **Issues**: [GitHub Issues](https://github.com/rxchi1d/py7zz/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/rxchi1d/py7zz/discussions)\n\n## License\n\nPython source code: MIT (see LICENSE)\nBundled runtime: 7-Zip 7zz under its own licenses (LGPL v2.1 + unRAR; parts BSD).\nSee THIRD_PARTY_NOTICES.md and licenses/7zip-LICENSE.txt.\n\n## Acknowledgments\n\nBuilt on [7-Zip](https://www.7-zip.org/) by Igor Pavlov.\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2025 py7zz contributors\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "Python wrapper for 7zz CLI tool providing cross-platform compression with multiple archive formats",
"version": "1.1.1",
"project_urls": {
"Homepage": "https://github.com/rxchi1d/py7zz",
"Issues": "https://github.com/rxchi1d/py7zz/issues",
"Repository": "https://github.com/rxchi1d/py7zz"
},
"split_keywords": [
"7z",
" 7zip",
" archive",
" compression"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "1a42b038a766af544ecc6d60d74e6bd84e5ca70fe7ba4e67dffbe696105af9c8",
"md5": "b1a97ab564502d1c496bb26c4c800eed",
"sha256": "a0c06bec0b4480c953b7d2b8684d2a8471a7e2148f1713062ed6d843bae55215"
},
"downloads": -1,
"filename": "py7zz-1.1.1-py3-none-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "b1a97ab564502d1c496bb26c4c800eed",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 2693924,
"upload_time": "2025-09-07T15:06:30",
"upload_time_iso_8601": "2025-09-07T15:06:30.644269Z",
"url": "https://files.pythonhosted.org/packages/1a/42/b038a766af544ecc6d60d74e6bd84e5ca70fe7ba4e67dffbe696105af9c8/py7zz-1.1.1-py3-none-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e97664e7532045169ad92ab5e00f4789f0c90735e4d1d5adcf66d59cc82a9a3b",
"md5": "9613667302826f2ea4bb77fcadec6d03",
"sha256": "c5800d8c813d4f0a60d202f9d8eeea44db351fde2ab4a34c8968d2ba34610bfc"
},
"downloads": -1,
"filename": "py7zz-1.1.1-py3-none-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "9613667302826f2ea4bb77fcadec6d03",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1390012,
"upload_time": "2025-09-07T15:06:32",
"upload_time_iso_8601": "2025-09-07T15:06:32.586627Z",
"url": "https://files.pythonhosted.org/packages/e9/76/64e7532045169ad92ab5e00f4789f0c90735e4d1d5adcf66d59cc82a9a3b/py7zz-1.1.1-py3-none-manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ab0b44f56b303058e872d9ba93dd4bea05a47ccddac03a4c2e89e3f78aa6fd60",
"md5": "8170ee5cd0ac5c75fa99c81f013c9ca5",
"sha256": "b168577f805d77f77db16dcc35ce6c2eec7048a01192f4b89c41e3e912d0ec63"
},
"downloads": -1,
"filename": "py7zz-1.1.1-py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "8170ee5cd0ac5c75fa99c81f013c9ca5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 1206632,
"upload_time": "2025-09-07T15:06:34",
"upload_time_iso_8601": "2025-09-07T15:06:34.390540Z",
"url": "https://files.pythonhosted.org/packages/ab/0b/44f56b303058e872d9ba93dd4bea05a47ccddac03a4c2e89e3f78aa6fd60/py7zz-1.1.1-py3-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-07 15:06:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "rxchi1d",
"github_project": "py7zz",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "py7zz"
}