Python Dependency Mapper
A fast Rust CLI tool for analyzing Python codebases and mapping module dependencies. Designed for both human engineers and AI coding assistants to understand, maintain, and refactor large Python projects.
Features
Core Analysis Commands
- Impact Analysis - Identify all modules that depend on a specific module (blast radius)
- Dependencies - Show all dependencies of a specific module
- Circular Dependencies - Detect and report dependency cycles
- Dead Code Detection - Find orphaned modules with no dependents
- External Dependencies - Audit external package usage across the codebase with manual package declarations
- Pressure Points - Identify modules with the highest number of dependents
- Metrics - Display overall codebase health indicators
AI Agent Integration
- Smart Context Selection - Curated file lists for AI agents
- Risk Assessment - Pre-change complexity analysis
- Dependency Validation - Prevent circular dependencies
- Parallel Work Identification - Enable multi-agent workflows
Output Formats
- Human-readable text (default)
- JSON for programmatic processing
- CSV for spreadsheet analysis
- DOT/Graphviz for visualization
- Agent-optimized Markdown
- Cursor IDE context format
Installation
Prerequisites
- Rust 1.70+ (uses Rust 2024 edition)
- Python 3.10+ codebase to analyze
Build from Source
Install with cargo
Quick Start
The commands should be launched at the root of your python project, where your pyproject.toml is located.
# Check what modules depend on a specific module (blast radius analysis)
# Check what modules a specific module depends on
# Find all circular dependencies
# Analyze external dependencies (includes packages from .used-externals.txt if present)
# Show modules with most dependencies (pressure points), can be combined with grep or head
# General analysis of a Python codebase
Usage Examples
Impact Analysis
# See what breaks if you change this module
# Output:
# Modules depending on 'src.payments.processor':
# - src.api.billing (Imports)
# - src.services.subscription (Imports)
# - tests.test_payments (Imports)
# Total: 3 modules affected
Dependencies Inspection
# See what a module depends on
# Output:
# Dependencies of 'src.payments.processor':
# - stripe (External - Imports)
# - src.models.payment (Internal - Imports)
# - src.utils.validation (Internal - Imports)
# Total: 3 dependencies (1 external, 2 internal)
External Dependencies with Manual Declarations
# Analyze external dependencies
# Output includes both code-detected and manually declared packages:
# External Dependencies Analysis:
#
# === Summary ===
# Total external packages used: 127
# Manually declared externals: 10
Manual Package Declarations: Create a .used-externals.txt file in the same directory as your pyproject.toml to declare additional packages that should be considered "used" even if not directly imported in code:
# .used-externals.txt
# Build tools
setuptools
wheel
# Runtime dependencies not directly imported
redis # Used via config
docker # Used in deployment
# Development tools
ruff
mypy # Type checker
Features of .used-externals.txt:
- One package name per line
- Comments with
#(full-line or inline) - Automatic normalization to PyPI naming conventions
- Merges with code-detected packages
- Optional - works silently when file doesn't exist
Architecture Health
# Check for circular dependencies
# Get overall metrics (coming soon™)
# Find potential dead code (coming soon™)
AI Agent Integration (coming soon™)
Parser Features
- Static Analysis: Uses
rustpython-parserfor AST-based parsing - Import Styles: Supports all Python import patterns:
import modulefrom module import namefrom module import *- Nested paths and aliases
- Original Names: Extracts original module names (ignores aliases like
import numpy as np)
Graph Model
The tool builds a dependency graph with three relationship types:
- Imports: Direct import relationships
- Contains: Package/module containment
- IncludedIn: Reverse containment relationships
Dependencies
rustpython-parser- Python AST parsingpetgraph- Graph data structures and algorithmsclap- Command line interfacewalkdir- File system traversalanyhow- Error handlingserde- Serialization for JSON outputindicatif- Progress bars
Development
Building
Testing
Code Quality
Use Cases
For Human Engineers
- Refactoring: Understand blast radius before making changes
- Architecture Review: Identify circular dependencies and coupling issues
- Code Cleanup: Find dead code and unused modules
- Security Audits: Track external dependency usage
For AI Coding Assistants
- Context Selection: Get relevant files for code understanding
- Risk Assessment: Evaluate change complexity before implementation
- Dependency Validation: Prevent architectural violations
- Parallel Work: Enable multiple agents to work independently
Target Scope
- Codebase Size: Optimized for Python projects up to ~100k lines
- Analysis Type: Static imports only (excludes dynamic imports)
- Python Version: Targets Python 3.10+ codebases
Contributing
- Fork the repository
- Create a feature branch
- Make your changes following the project's principles:
- Simplicity first (YAGNI)
- Prefer functions over complex structures
- Eliminate data redundancy
- Self-documenting code
- Run tests and quality checks
- Submit a pull request