Skip to main content

Build focused Python Lambda pack bundles from source imports.

Project description

monopack

monopack splits a Python monorepo into smaller, entrypoint-focused packages.

Packs are defined by files in packs/ (packs/<name>.py). For each pack, monopack traces imports, copies reachable first-party files, installs only the needed third-party distributions, and writes an isolated build output.

If packs/ is missing, or no pack files are found, the CLI exits with a clear error.

Background

This was inspired by multi-function Lambda packaging, where smaller per-entrypoint artifacts often help cold start performance and reduce package bloat. The same approach works for any Python monorepo where you want tighter per-entrypoint packaging.

Why use it

  • Smaller per-pack artifacts from one shared codebase.
  • Tighter dependency surface for each pack.
  • Easier to inspect what each entrypoint actually ships.

Basic usage

Build one pack:

python -m monopack users_get

Build all discovered packs in packs/*.py:

python -m monopack

Build one pack and skip tests:

python -m monopack users_get --skip-tests

Verify and tests

  • --verify (default on): runs a generated verifier script inside the built pack to check importability of selected modules and validate pack entrypoint expectations (including lambda_handler on the pack module).
  • tests run by default in an isolated build/<pack_name>_test/ workspace so build artifacts stay clean.
  • --skip-tests: skip pack-scoped test execution for faster local loops.

tests/ is required unless test execution is skipped (--skip-tests).

CLI options

Command form:

python -m monopack [pack_name] [options]
Option Default Why it is useful
pack_name (positional, optional) builds all discovered packs Target a single pack while iterating locally or in CI.
--version n/a Print installed CLI version and exit.
--packs-dir packs Use a non-default entrypoint directory.
--build-dir build Change output location (for CI temp dirs or custom build roots).
--skip-tests False Skip pack-scoped tests (tests run by default).
--verify / --no-verify verify on Keep safety checks on by default; disable for faster local loops.
--auto-fix False Retry missing-module verification failures by updating managed inline config blocks (up to 3 attempts).
--debug False Print detailed import and dependency resolution diagnostics to stderr.
--jobs auto Parallelize multi-pack builds; set a number for fixed worker count.
--sha-output hex Choose deploy digest output format(s): hex, b64, or hex,b64.
--package-manager auto Select dependency source flow: auto, pip, uv, poetry, pipenv.
--existing-install-python unset Point to an existing Python install to reuse pip cache artifacts during dependency cache sync.

Environment variables are also supported. CLI flags override env vars.

How it works

  1. Resolve target packs from packs/ or explicit pack_name.
  2. Build an import graph from each pack entrypoint.
  3. Copy reachable first-party files into build/<pack_name>/.
  4. Resolve third-party import roots to distributions from pinned dependency sync.
  5. Install only that per-pack dependency subset into the build target.
  6. Run verifier and pack-scoped tests in an isolated build/<pack_name>_test/ workspace (unless --skip-tests).
  7. Write zip artifact and optional digest files from the clean runtime build.

More docs

  • CLI reference: docs/cli.md
  • Fixture-driven testing notes: docs/testing-fixtures.md
  • Publishing: docs/publishing.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.4.0.tar.gz (42.8 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.4.0-py3-none-any.whl (27.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for monopack-0.4.0.tar.gz
Algorithm Hash digest
SHA256 7d877292b516ff2cd2b1b5a6eeeeac5964238f4dbe68c64b13fc2abf0cbf26de
MD5 a3a3f20971c6d4f660a058ef55af745a
BLAKE2b-256 7401b9671c22a9f20993587f17c277b94540db9460416170a0d094c809840fa5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: monopack-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 27.0 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 06094779c3e8efa15ab61cfcaf3fff23906aebd6c833bf4ccfd57f23e0e877a2
MD5 444af8be3fccf45745c7b10589d05666
BLAKE2b-256 754ecbb220b8dd87513fcf305f7098b221f25aff1facabff84b20aec85901fed

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