"Know the cost of your imports."
A CLI tool that measures the true disk size of Python packages, including all their dependencies. Perfect for optimizing Docker images, Lambda functions, and understanding your dependency footprint.
- 🔍 Accurate Size Analysis - Measures the real disk footprint of packages and all dependencies
- 📁 Local Project Analysis - Weigh everything your own
pyproject.tomlpulls in - 🌐 Cross-Platform Analysis - Check Linux package sizes from macOS/Windows (great for Docker planning)
- 🐍 Python Version Support - Analyze sizes across different Python versions
- 📊 Beautiful Output - Rich terminal output with dependency trees
- 🔄 CI/CD Ready - JSON output and budget checks for pipelines
- ⚡ Fast - Leverages uv's speed and caching
pip install pip-weighOr with uv:
uv pip install pip-weigh- Python 3.9+
- uv must be installed and available in PATH
pip-weigh pandasOutput:
📦 pandas (2.1.4)
├── Total Size: 138 MB
├── Self Size: 45 MB
├── Platform: linux
├── Python: 3.12
└── Dependencies (3):
├── numpy (1.26.2): 85 MB
├── pytz (2023.3): 5 MB
└── python-dateutil (2.8.2): 3 MB
Point pip-weigh at your own project to weigh everything its pyproject.toml pulls in:
pip-weigh . # current directory
pip-weigh ./services/api # any directory with a pyproject.toml
pip-weigh path/to/pyproject.toml # the file itself
pip-weigh requirements.txt # a requirements fileIf the project has a uv.lock, pip-weigh measures the locked versions, so the
number matches what you will actually ship. Pass --no-lock to re-resolve the
declared specifiers instead.
Optional extras and PEP 735 dependency groups are excluded by default — dev tooling shouldn't count against your image budget — and can be opted into:
pip-weigh . --extra api --extra worker
pip-weigh . --group test
pip-weigh . --devYour project is never modified: no .venv is created in it, no lockfile is
written, and the project's own code is not installed. Only its dependency
closure is measured.
This makes a neat CI gate:
pip-weigh . --platform linux --budget 250MBNote: a bare name is always treated as a PyPI package. Write
./rich(notrich) if you mean a local directory of that name.
Check what the size would be on Linux (great for Docker):
pip-weigh torch --platform linuxAccepts linux, macos, windows, or a full target triple such as
x86_64-manylinux_2_28 or aarch64-apple-darwin.
pip-weigh pandas numpy requestsEach package is measured in isolation, and pip-weigh additionally installs them
together to report the deduplicated footprint — shared dependencies are
counted once, so the combined total is smaller than the sum of the rows. Skip
that extra pass with --no-combined.
The tree lists the 15 largest dependencies by default. To see them all:
pip-weigh pandas --limit 0 # no limit
pip-weigh pandas --limit 40 # a specific cap
pip-weigh pandas -v # verbose implies no limit--json always includes every dependency regardless of --limit.
pip-weigh pandas --jsonFail if a package or project exceeds a size limit:
pip-weigh pandas --budget 100MB
# Exit code 1 if exceededpip-weigh pandas --python 3.12| Option | Short | Description |
|---|---|---|
--platform |
-p |
Target platform (linux, macos, windows, or a target triple) |
--python |
Python version to analyze (e.g., 3.11) | |
--json |
-j |
Output as JSON |
--budget |
-b |
Maximum allowed size (e.g., 100MB, 1GB) |
--limit |
-l |
Max dependencies to list (default 15; 0 for all) |
--no-deps |
Show only the package itself, not dependencies | |
--extra |
Project mode: include an optional-dependency extra (repeatable) | |
--group |
Project mode: include a PEP 735 dependency group (repeatable) | |
--dev |
Project mode: include the dev dependency group |
|
--no-lock |
Project mode: re-resolve instead of using uv.lock |
|
--no-combined |
Skip the deduplicated total for multiple packages | |
--verbose |
-v |
Show detailed output, including every dependency |
--check |
Check that uv is installed | |
--version |
Show version | |
--help |
-h |
Show help message |
- Creates a temporary isolated environment using uv
- Installs the target package(s) with all dependencies, honoring
--python-platformso cross-platform estimates use the right wheels - Reads the installed
.dist-infodirectories to get the exact resolved set - Scans
.dist-info/RECORDfiles for accurate file-to-package mapping - Calculates logical sizes (important for Docker/Lambda accuracy)
- Presents results with a beautiful dependency tree
uv uses hardlinks from a global cache, so disk usage tools might show misleading numbers. pip-weigh always reports the logical size - the actual bytes your package would consume in a Docker image or cloud function.
MIT