API Reference

Programmatic API for using zipbundler in your Python code. Zipbundler provides both a zipapp-compatible API and extended functionality.

zipapp-Compatible API

create_archive() (zipapp-compatible)

Create a zipapp archive matching Python’s zipapp.create_archive() API exactly:

from zipbundler import create_archive

# Basic usage (matches zipapp.create_archive)
create_archive(
    source="src/myapp",
    target="app.pyz",
    interpreter="/usr/bin/env python3",
    main="myapp:main",
    compressed=True
)

Parameters:

Returns:

Raises:

This function is 100% compatible with Python’s zipapp.create_archive() and can be used as a drop-in replacement.

Extended API

build_zip()

Build a zip file from configuration or parameters.

from zipbundler import build_zip

# Build from config file
result = build_zip(config_path=".zipbundler.jsonc")

# Build with parameters
result = build_zip(
    packages=["src/my_package"],
    output_path="dist/my_package.zip",
    exclude=["**/__pycache__/**"]
)

Parameters:

Returns:

Raises:

load_config()

Load and validate a configuration file.

from zipbundler import load_config

config = load_config(".zipbundler.jsonc")

Parameters:

Returns:

Raises:

list_packages()

List packages and files that would be included.

from zipbundler import list_packages

files = list_packages(
    packages=["src/my_package"],
    exclude=["**/__pycache__/**"]
)

Parameters:

Returns:

get_interpreter() (zipapp-compatible)

Get the interpreter from an existing archive (matches zipapp.get_interpreter()):

from zipbundler import get_interpreter

# Get interpreter from archive
interpreter = get_interpreter("app.pyz")
print(interpreter)  # "/usr/bin/env python3" or None

Parameters:

Returns:

Raises:

validate_config()

Validate a configuration file.

from zipbundler import validate_config

try:
    validate_config(".zipbundler.jsonc")
    print("Config is valid")
except ConfigError as e:
    print(f"Config error: {e}")

Parameters:

Raises:

Classes

Config

Configuration object representing a zipbundler config.

from zipbundler import Config, load_config

config = load_config(".zipbundler.jsonc")

# Access configuration values
print(config.packages)
print(config.output.path)
print(config.options.shebang)

Attributes:

BuildResult

Result object from a build operation.

result = build_zip(...)

print(f"Built: {result.output_path}")
print(f"Files: {result.file_count}")
print(f"Size: {result.size_bytes}")

Attributes:

Exceptions

ZipbundlerError

Base exception for all zipbundler errors.

ConfigError

Raised when configuration is invalid.

from zipbundler import ConfigError

try:
    load_config("invalid.jsonc")
except ConfigError as e:
    print(f"Config error: {e}")

BuildError

Raised when build fails.

from zipbundler import BuildError

try:
    build_zip(...)
except BuildError as e:
    print(f"Build failed: {e}")

Examples

zipapp-Compatible Usage

from zipbundler import create_archive, get_interpreter

# Create archive (matches zipapp.create_archive exactly)
create_archive(
    source="src/myapp",
    target="app.pyz",
    interpreter="/usr/bin/env python3",
    main="myapp:main",
    compressed=True
)

# Get interpreter from archive (matches zipapp.get_interpreter)
interpreter = get_interpreter("app.pyz")
print(f"Interpreter: {interpreter}")

Extended API Usage

from zipbundler import build_zip

# Simple build
result = build_zip(
    packages=["src/my_package"],
    output_path="dist/my_package.pyz"
)

print(f"Created {result.output_path} with {result.file_count} files")

Advanced Configuration

from zipbundler import build_zip, Config

# Build with full options (using zipapp-compatible parameter names)
result = build_zip(
    packages=["src/my_package", "src/utils"],
    exclude=["**/tests/**", "**/__pycache__/**"],
    output_path="dist/my_package.pyz",
    entry_point="my_package.__main__:main",  # equivalent to 'main' in zipapp
    interpreter="/usr/bin/env python3",      # equivalent to 'interpreter' in zipapp
    main_guard=True,
    compressed=True,                         # equivalent to 'compressed' in zipapp
    compression="deflate"
)

Programmatic Config

from zipbundler import build_zip, Config

# Create config programmatically
config = Config(
    packages=["src/my_package"],
    exclude=["**/tests/**"],
    output=OutputConfig(path="dist/my_package.zip"),
    options=OptionsConfig(shebang=True, main_guard=True)
)

result = build_zip(config=config)

Watch Mode

from zipbundler import watch

# Watch for changes
watch(
    config_path=".zipbundler.jsonc",
    interval=1.0,
    callback=lambda result: print(f"Rebuilt: {result.output_path}")
)