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 (includinglambda_handleron 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
- Resolve target packs from
packs/or explicitpack_name. - Build an import graph from each pack entrypoint.
- Copy reachable first-party files into
build/<pack_name>/. - Resolve third-party import roots to distributions from pinned dependency sync.
- Install only that per-pack dependency subset into the build target.
- Run verifier and pack-scoped tests in an isolated
build/<pack_name>_test/workspace (unless--skip-tests). - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d877292b516ff2cd2b1b5a6eeeeac5964238f4dbe68c64b13fc2abf0cbf26de
|
|
| MD5 |
a3a3f20971c6d4f660a058ef55af745a
|
|
| BLAKE2b-256 |
7401b9671c22a9f20993587f17c277b94540db9460416170a0d094c809840fa5
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06094779c3e8efa15ab61cfcaf3fff23906aebd6c833bf4ccfd57f23e0e877a2
|
|
| MD5 |
444af8be3fccf45745c7b10589d05666
|
|
| BLAKE2b-256 |
754ecbb220b8dd87513fcf305f7098b221f25aff1facabff84b20aec85901fed
|