Skip to main content

Create clean ZIP archives that respect .zipignore patterns (gitignore-style).

Project description

ZipIgnore

Create clean ZIP archives that respect .zipignore patterns (gitignore-style).

CI Python License: MIT


The Problem

Standard zip tools have no concept of project-specific exclusions. Every time you archive a project you manually exclude node_modules/, build artifacts, .env secrets, and log files — or you accidentally include them.

The Solution

ZipIgnore reads a .zipignore file from your project (same syntax as .gitignore) and automatically excludes matching files when creating the ZIP archive.

zipignore ./my-project
# → Creates my-project.zip with clean, intentional contents

Installation

Recommended: pipx (isolated global install)

pipx install ZipIgnore

pip

pip install ZipIgnore

From source (contributors)

git clone https://github.com/TheSuraj01/SafeZip.git
cd smartzip
poetry install

Quick Start

1. Create a .zipignore file in your project:

# .zipignore
node_modules/
dist/
build/
*.log
.env
.env.local
**/__pycache__/
**/*.pyc

2. Run ZipIgnore:

zipignore ./my-project

Output:

─────────────── ZIPIGNORE REPORT ───────────────

Excluded:
  ✗ node_modules/lodash/lodash.js
  ✗ .env
  ✗ error.log

Included:
  ✓ src/app.py
  ✓ src/utils.py
  ✓ README.md

Statistics:
  Included Files   3
  Excluded Files   312
  Archive Size     4.2 MB
  Archive Path     /home/user/my-project.zip

──────────── ✓ Archive created: my-project.zip ────────────

CLI Reference

Basic Usage

zipignore <FOLDER> [OPTIONS]

Options

Flag Short Description
--output PATH -o Custom output ZIP path (default: {folder}.zip in CWD)
--dry-run Preview inclusions/exclusions without creating an archive
--verbose -v Print each file's include/exclude decision in real time
--force -f Overwrite the output file if it already exists
--version Print version and exit
--help Show help and exit

Examples

# Archive ./project → creates ./project.zip
zipignore ./project

# Custom output path
zipignore ./project -o release-v1.0.zip

# Dry run — preview only, no archive created
zipignore ./project --dry-run

# Verbose — see every include/exclude decision
zipignore ./project --verbose

# Overwrite existing archive
zipignore ./project --force

# Combine flags
zipignore ./project -o dist/release.zip --verbose --force

.zipignore Reference

.zipignore uses the same syntax as .gitignore (powered by pathspec).

Pattern Syntax

Pattern Description Example Match
node_modules/ Directory and all contents node_modules/lodash/index.js
*.log Wildcard by extension error.log, logs/access.log
.env Exact filename .env, config/.env
temp/* Single-level glob temp/cache.db (not temp/sub/file)
**/*.pyc Recursive wildcard a/b/c/module.pyc
!important.log Negation — re-include important.log (if previously matched)
# comment Comment line (ignored)

Example .zipignore

# Dependencies
node_modules/
vendor/

# Build artifacts
dist/
build/
*.egg-info/

# Environment & secrets
.env
.env.*
!.env.example

# Logs
*.log
logs/

# Python cache
**/__pycache__/
**/*.pyc
**/*.pyo

# Temporary files
*.tmp
*.temp
temp/
.cache/

# IDE
.idea/
.vscode/
*.swp

# OS
.DS_Store
Thumbs.db

# Test artifacts
.pytest_cache/
htmlcov/
.coverage

Always Excluded

The following are always excluded regardless of .zipignore contents:

  • .zipignore itself (tooling artifact, not project content)

Exit Codes

ZipIgnore follows standard UNIX exit code conventions for use in CI/CD pipelines:

Code Meaning
0 Success — archive created (or dry run completed)
1 User error — bad path, output exists, all files excluded
2 Internal error — unexpected failure

Python API

ZipIgnore can also be used as a Python library:

from pathlib import Path
from smartzip import run, ArchiveRequest

request = ArchiveRequest(
    target=Path("./my-project"),
    output=Path("./my-project.zip"),
    dry_run=False,
    verbose=False,
    force=False,
)

result = run(request)
print(f"Archived {result.file_count} files ({result.size_human})")

Platform Support

Platform Status
Linux ✅ Fully supported
macOS ✅ Fully supported
Windows ✅ Fully supported

ZIP archives created on any platform use POSIX / path separators internally, ensuring consistent extraction on all systems.


Contributing

See docs/contributing.md for guidelines.


License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zipignore-0.1.1.tar.gz (38.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zipignore-0.1.1-py3-none-any.whl (53.2 kB view details)

Uploaded Python 3

File details

Details for the file zipignore-0.1.1.tar.gz.

File metadata

  • Download URL: zipignore-0.1.1.tar.gz
  • Upload date:
  • Size: 38.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zipignore-0.1.1.tar.gz
Algorithm Hash digest
SHA256 153968a0851c9f999dbdec02f389b847ef9fafd6affd743df76f46c25c0350d0
MD5 8e553c1d5dcb35cfd2fa044fc76418ab
BLAKE2b-256 7825ba23c33eae0e6caf85e29ed0e03da79b56d01178fa506121c892a5257cb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for zipignore-0.1.1.tar.gz:

Publisher: release.yml on TheSuraj01/SafeZip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zipignore-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: zipignore-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 53.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zipignore-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a09c671b7bc039e5b55db2225129b902eb72f56efdb81addcdeb4074f6b5e6e9
MD5 948fb145a959af785c3343c2b5a7e450
BLAKE2b-256 c3a31cb4361de05e54cd92313d7f9e47ee9859afb8c65dd7bc36efdfe7975c03

See more details on using hashes here.

Provenance

The following attestation bundles were made for zipignore-0.1.1-py3-none-any.whl:

Publisher: release.yml on TheSuraj01/SafeZip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page