Dependency optimization and pruning made simple
Project description
⚡️ PipZap ⚡
Zap the mess out of the dependency jungles
Overview
PipZap is a command-line tool created to optimize Python dependency management by pruning redundant dependencies and merging multiple dependency files into a streamlined list.
Leveraging uv for dependency resolution, it supports requirements.txt, uv’s pyproject.toml, and Poetry’s pyproject.toml (both legacy and modern formats). PipZap ensures your dependency declarations are as lean as possible without compromising functionality.
Why PipZap?
Python dependency management can be a mess, especially with scientific libraries where outdated practices persist. Projects (even recent ones) often ship with a requirements.txt generated by pip freeze, leaving you with a sprawling list of pinned dependencies, many of which are redundant.
Take the easy_ViTPose project as an example: its requirements.txt lists over 40 packages, including transitive dependencies like certifi and numpy.
See below for a real example with VitPose
PipZap can transform this into a concise, modern format such as poetry, uv, or even a good old requirements.txt with just the essential direct dependencies. This makes it much easier to
adopt any package into a modern codebase.
Moreover, even in well-maintained codebases, accidental over-specification creeps in, and PipZap cuts through that noise, keeping your dependency list clean and intentional.
Features
- Dependency Pruning: Removes redundant dependencies satisfied by transitive dependencies.
- Format Auto-Detection: Automatically identifies
requirements.txt, uv, and Poetry files. - Flexible Output: Supports outputting in
requirements,poetry, oruvformats. - Python Version Handling: Extracts from
pyproject.tomlor accepts via CLI forrequirements.txt. - Verbose Logging: Optional rich logging for detailed insights.
Installation
Install PipZap via pip:
pip install pipzap
Usage
Eliminate redundant dependencies from a file:
pipzap requirements.txt -p 3.11
pipzap pyproject.toml
pipzap pyproject.toml -o pruned.txt -v
- Use
-p/--python-versionforrequirements.txt(required). - Python version is auto-detected from
pyproject.tomlif present. -p/--python-versionis required if a source file isrequirements.txt.
Supported Formats
requirements.txt: Pip-style with--extra-index-urlsupport.- UV
pyproject.toml: Parses[project.dependencies]and[project.requires-python]. - Poetry
pyproject.toml: Handles[project.dependencies](modern) and[tool.poetry.dependencies](legacy).
How It Works
- Parsing: Detects file format and extracts direct dependencies.
- Resolution: Uses
uvto resolve the full dependency graph via a temporarypyproject.toml. - Pruning: Identifies and removes transitive redundancies.
- Formatting: Outputs in the specified format (
requirements,poetry, oruv).
Examples
Pruning requirements.txt from easy_ViTPose
Input (requirements.txt from easy_ViTPose):
certifi==2023.7.22
charset-normalizer==3.2.0
coloredlogs==15.0.1
contourpy==1.1.1
cycler==0.11.0
ffmpeg==1.4
filelock==3.12.4
filterpy==1.4.5
flatbuffers==23.5.26
fonttools==4.43.0
humanfriendly==10.0
idna==3.4
imageio==2.31.3
importlib-resources==6.1.0
jinja2>=3.1.3
kiwisolver==1.4.5
lazy_loader==0.3
MarkupSafe==2.1.3
matplotlib==3.8.0
mpmath==1.3.0
networkx==3.1
numpy==1.26.0
onnx==1.14.1
onnxruntime==1.16.0
opencv-python==4.8.0.76
packaging==23.1
pandas==2.1.1
Pillow>=10.2.0
protobuf==4.24.3
psutil==5.9.5
py-cpuinfo==9.0.0
pycocotools==2.0.8
pyparsing==3.1.1
python-dateutil==2.8.2
pytz==2023.3.post1
PyWavelets==1.4.1
PyYAML==6.0.1
requests==2.31.0
scikit-image==0.21.0
scipy==1.11.2
seaborn==0.12.2
six==1.16.0
sympy==1.12
tifffile==2023.9.18
tqdm==4.66.1
typing_extensions==4.8.0
tzdata==2023.3
ultralytics==8.2.48
urllib3>=2.0.7
zipp==3.17.0
Command:
pipzap prune requirements.txt -p 3.11 -f poetry
Output (pruned to direct dependencies):
[tool.poetry.dependencies]
ffmpeg = "1.4"
filterpy = "1.4.5"
importlib-resources = "6.1.0"
lazy_loader = "0.3"
onnx = "1.14.1"
onnxruntime = "1.16.0"
pycocotools = "2.0.8"
scikit-image = "0.21.0"
typing_extensions = "4.8.0"
ultralytics = "8.2.48"
zipp = "3.17.0"
Merging and Pruning with Poetry Output
Input (reqs.txt):
requests==2.28.1
Input (pyproject.toml):
[project]
dependencies = [
"urllib3>=1.26.9",
"flask==2.0.1",
]
requires-python = ">=3.9"
Contributing
Contributions are encouraged! To contribute:
- Fork the repository.
- Install dev dependencies:
pip install -e .[dev]. - Run tests:
pytest. - Submit a pull request.
Follow the Ruff linting rules and ensure type safety with mypy.
License
PipZap is licensed under the MIT License. See LICENSE for details.
Acknowledgments
- Powered by uv for dependency resolution.
- Born from the chaos of overgrown Python dependency lists.
Project details
Release history Release notifications | RSS feed
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 pipzap-0.2.2.tar.gz.
File metadata
- Download URL: pipzap-0.2.2.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.11.11 Linux/6.8.0-1021-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
289b9d24996a365e9c6243f3ce51ef48b87cecc3fcaa1c9e4fc82fba390d9bd7
|
|
| MD5 |
e146ae76a685170bfd6d2334f4f8ba9e
|
|
| BLAKE2b-256 |
b6ff8dcede6e45a26d2a3576bdb9b2c9aef283a64c4d359cfcad2f888622f03f
|
File details
Details for the file pipzap-0.2.2-py3-none-any.whl.
File metadata
- Download URL: pipzap-0.2.2-py3-none-any.whl
- Upload date:
- Size: 22.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.11.11 Linux/6.8.0-1021-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e49e2c09f751fb5d617a216fbf407fda5747428314db063755809bc1ce1398d
|
|
| MD5 |
c21469ca07307558c5601af5243c4e9e
|
|
| BLAKE2b-256 |
2007109f198251e5ba56a7f33ca0b020eabdadc8dfd9f5012de3ccc3d119e01d
|