Skip to main content

Build focused Python Lambda function bundles from source imports.

Project description

monopack

monopack builds per-function Python Lambda bundles from a monolith-style repo.

Background

Go works well for multi-Lambda projects because one codebase can expose multiple cmd entrypoints and build each function with only what it needs.

Python workflows are usually less ergonomic at that scale:

  • AWS SAM and Serverless framework commonly package one Python artifact per project.
  • Per-function folder layouts can make shared code awkward.
  • Workarounds such as local packages, symlinks, or copied shared folders often add maintenance overhead.

monopack is intended to make Python feel closer to that Go workflow without changing your project into N separate services. It takes a larger codebase and produces per-function zip artifacts by:

  • tracing imports from each function entrypoint,
  • copying reachable first-party files,
  • deriving a minimal pinned requirements.txt subset for third-party imports,
  • installing only that dependency subset into the build target,
  • and running optional verification/tests to increase confidence that each split artifact works in isolation.

It is intentionally conservative: this is import-based trimming with guardrails, not full tree-shaking or whole-program optimization. It aims to cover common Python import patterns used in real projects, while keeping behavior explicit and testable.

What monopack does

  • Builds one or many functions from functions/*.py into build/<function_name>/.
  • In deploy mode, writes deploy zip artifacts at build/<function_name>.zip.
  • In deploy mode, writes package digest helper file(s) (build/<function_name>.package.sha256 by default).
  • In test mode, copies relevant tests and runs them in the build target (no zip output).
  • Uses pinned project requirements.txt (name==version lines only).
  • Supports optional auto-fix for missing-module verification failures (--auto-fix, opt-in).

Quickstart

Project expectations:

  • functions/ directory with function entrypoint files (<name>.py).
  • Project-level requirements.txt containing pinned name==version lines.
  • Optional tests/ directory when using --mode test.

Build one function in deploy mode:

PYTHONPATH=src python -m monopack users_get \
  --functions-dir functions \
  --build-dir build

Run confidence build in test mode:

PYTHONPATH=src python -m monopack users_get \
  --functions-dir functions \
  --build-dir /tmp/monopack-build \
  --mode test

Build all functions discovered in functions/*.py (no target argument):

PYTHONPATH=src python -m monopack \
  --functions-dir functions \
  --build-dir build

CLI usage

Basic form:

PYTHONPATH=src python -m monopack [function_name] [options]

Key flags for real-project usage:

  • --version: prints the installed monopack version and exits.
  • --mode deploy|test: deploy builds runtime payload + zip; test builds payload + tests (no zip).
  • --with-tests: deploy mode only; runs relevant tests before finalizing deploy payload.
  • --verify / --no-verify: verifier is on by default.
  • --auto-fix: opt-in auto-repair loop for missing imports during verify.
  • --sha-output: comma-separated package digest outputs for deploy mode (hex, b64; default hex).

Package digest output guidance:

  • hex (.package.sha256): general CI/script diffing and human-readable checks.
  • b64 (.package.sha256.b64): Terraform-style workflows that prefer base64 digest values.
  • Use both when needed: --sha-output hex,b64.

For full argument behavior and validation details, see docs/cli.md.

Constraints and limits

  • Function discovery is shallow: only functions/*.py (excluding names starting with _).
  • Function names must use letters, numbers, and underscores; target names cannot include /, \\, or ..
  • Build directory must differ from functions directory and cannot be nested inside it.
  • Requirements parser accepts only pinned name==version lines (comments and blanks allowed).
  • First-party graph traversal is limited to roots functions, app, and lib unless inline config adds modules.
  • Auto-fix only handles ModuleNotFoundError flows and retries up to 3 times when enabled.

Recommended feedback loop for monolith split confidence

  1. Build the target in test mode with verification enabled: PYTHONPATH=src python -m monopack <function> --mode test --verify.
  2. Inspect build output (build/<function>/) and generated requirements.txt for expected scope.
  3. Build deploy artifact once confidence is good: PYTHONPATH=src python -m monopack <function> --mode deploy.
  4. Optionally gate deploy build with tests: PYTHONPATH=src python -m monopack <function> --mode deploy --with-tests.
  5. Run repository tests to catch broader regressions: python -m unittest discover -s tests -v.
  6. Tighten imports/tests/inline config and repeat until scoped build behavior is stable.

Deeper docs

  • CLI reference: docs/cli.md
  • PyPI publishing: docs/publishing.md
  • Fixture-driven confidence loop and matrix: docs/testing-fixtures.md

For Terraform source_code_hash usage with generated package digests, see docs/cli.md.

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

monopack-0.1.0.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

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

monopack-0.1.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file monopack-0.1.0.tar.gz.

File metadata

  • Download URL: monopack-0.1.0.tar.gz
  • Upload date:
  • Size: 33.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for monopack-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9830010e0dd4930f038727a5ae6f6bfcb4aa355b435d24848ea81f73968bd3e9
MD5 e463cb3e6fa19c4352f37a839620171f
BLAKE2b-256 771d75bd31f0ac2509788ffa6899af5aea821a62fb89506763ffdc37588cc5db

See more details on using hashes here.

File details

Details for the file monopack-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: monopack-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 20.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for monopack-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aebdf3a27ba7894af58e30c6fb04984e9a47a3cbb1ef27d641d4d62da550fc99
MD5 3b28276278c0a62ff885643ab1b17e01
BLAKE2b-256 8aa297ca8386eb50b4363d041ea9f112167827fc683d3ffbfc93fc88933dcbc4

See more details on using hashes here.

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