Metadata-Version: 2.4
Name: pip-weigh
Version: 0.1.0
Summary: Know the cost of your imports - Audit your dependencies before you commit
Author: pip-weigh contributors
License: MIT
License-File: LICENSE
Keywords: analysis,dependencies,disk,pip,size,uv
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.9
Requires-Dist: rich>=13.0.0
Requires-Dist: typer>=0.9.0
Provides-Extra: dev
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Description-Content-Type: text/markdown

# pip-weigh 📦⚖️

> *"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.

## Features

- 🔍 **Accurate Size Analysis** - Measures the real disk footprint of packages and all dependencies
- 🌐 **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

## Installation

```bash
pip install pip-weigh
```

Or with uv:
```bash
uv pip install pip-weigh
```

## Requirements

- Python 3.9+
- [uv](https://github.com/astral-sh/uv) must be installed and available in PATH

## Usage

### Basic Usage

```bash
pip-weigh pandas
```

Output:
```
Package: pandas (2.1.4)
├── Total Size: 138 MB
├── Self Size: 45 MB
└── Dependencies (Recursive):
    ├── numpy (1.26.2): 85 MB
    ├── pytz (2023.3): 5 MB
    └── python-dateutil: 3 MB
```

### Cross-Platform Analysis

Check what the size would be on Linux (great for Docker):

```bash
pip-weigh torch --platform linux
```

### Multiple Packages

```bash
pip-weigh pandas numpy requests
```

### JSON Output (for CI/CD)

```bash
pip-weigh pandas --json
```

### Budget Check

Fail if package exceeds a size limit:

```bash
pip-weigh pandas --budget 100MB
# Exit code 1 if exceeded
```

### Specify Python Version

```bash
pip-weigh pandas --python 3.12
```

## CLI Options

| Option | Short | Description |
|--------|-------|-------------|
| `--platform` | `-p` | Target platform (linux, macos, windows) |
| `--python` | | Python version to analyze (e.g., 3.11) |
| `--json` | `-j` | Output as JSON |
| `--budget` | `-b` | Maximum allowed size (e.g., 100MB, 1GB) |
| `--no-deps` | | Show only the package itself, not dependencies |
| `--verbose` | `-v` | Show detailed output |
| `--help` | `-h` | Show help message |

## How It Works

1. Creates a temporary isolated environment using uv
2. Installs the target package(s) with all dependencies
3. Parses `uv.lock` to get the complete dependency tree
4. Scans `.dist-info/RECORD` files for accurate file-to-package mapping
5. Calculates logical sizes (important for Docker/Lambda accuracy)
6. Presents results with a beautiful dependency tree

## Why Logical Size Matters

`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.

## License

MIT
