Skip to main content

A Python dependency tree analyzer with rich terminal output

Project description

PyDepTree

PyPI version Python Support License: MIT

A powerful Python dependency analyzer that visualizes module dependencies in your Python projects as a beautiful tree structure. Built with Rich for colorful terminal output.

Demo

Features

Core Features

  • 🎯 Smart Import Detection: Uses AST parsing to accurately find all imports
  • 🌳 Beautiful Tree Visualization: Rich-powered colorful dependency trees
  • 🔍 Configurable Depth: Control how deep to analyze dependencies
  • 🚀 Fast & Efficient: Skips standard library and external packages
  • 🎨 Import Preview: See actual import statements with --show-code
  • 📊 Progress Tracking: Real-time progress for large codebases
  • 🔄 Circular Dependency Detection: Identifies and handles circular imports

Enhanced Features ✨

  • 🎨 Color-coded File Types: Models (📊), Services (🌐), Utils (🔧), Tests (🧪), Main (🚀)
  • 📈 File Statistics: Size, line count, and import count badges for each file
  • 🔍 Lint Integration: Automatic error/warning detection using ruff (when available)
  • 📊 Summary Tables: Aggregate statistics by file type with quality metrics
  • 🎯 Enhanced Visualization: Rich terminal output with progress indicators and legends

Installation

Using pip

pip install pydeptree

Using pipx (recommended)

pipx install pydeptree

From source

git clone https://github.com/tfaucheux/pydeptree.git
cd pydeptree
pip install -e .

Enhanced Features Installation

For lint checking capabilities, install with enhanced dependencies:

pip install -e ".[enhanced]"

This installs ruff for code quality analysis.

Usage

Basic Usage

Analyze a Python file and see its direct dependencies:

pydeptree myapp.py

Enhanced Usage

Use the enhanced CLI for additional features:

pydeptree-enhanced myapp.py --depth 2

The enhanced version provides color-coded file types, lint checking, and detailed statistics.

Advanced Options

# Analyze dependencies up to 3 levels deep
pydeptree myapp.py --depth 3

# Show import statements from each file  
pydeptree myapp.py --show-code

# Specify a custom project root
pydeptree myapp.py --project-root /path/to/project

Example Output

Analyzing dependencies for: /home/user/project/main.py
Project root: /home/user/project
Max depth: 2

Dependency tree:
└── main.py
    ├── utils/config.py
    │   ├── utils/validators.py
    │   └── models/settings.py
    └── services/api.py
        ├── utils/http.py
        └── models/response.py

Found 6 files with 8 total dependencies

Quick Start Examples

Basic Usage

# Analyze a Python file with the original CLI
pydeptree myapp.py

# Use the enhanced version with additional features
pydeptree-enhanced myapp.py --depth 2

Enhanced Features Examples

# Disable lint checking
pydeptree-enhanced myapp.py --no-check-lint

# Disable statistics table
pydeptree-enhanced myapp.py --no-show-stats

# Show detailed import statements
pydeptree-enhanced myapp.py --show-code --depth 3

Testing the Enhanced Features

# Run the interactive demo
python demo_enhanced.py

# Try on the sample project (contains intentional lint errors for demo)
pydeptree-enhanced sample_project/main.py --depth 2

# Compare with original CLI
pydeptree sample_project/main.py --depth 2

Demo and Sample Project

PyDepTree includes a comprehensive sample project to demonstrate its enhanced features.

⚠️ Note about Sample Project: The sample_project/ directory contains intentional code quality issues (linting errors, warnings, and code smells) to demonstrate the enhanced PyDepTree's lint checking capabilities. These are not bugs but deliberate examples that showcase how the tool can help identify code quality problems in real projects.

The sample project includes realistic examples of:

  • Missing imports and type hints
  • Unused variables
  • Long lines exceeding style guidelines
  • Inefficient code patterns
  • Complex conditions that could be simplified

This allows you to see how PyDepTree Enhanced detects and reports these issues with color-coded badges and summary statistics.

Command Line Options

Basic CLI (pydeptree)

  • FILE_PATH: Path to the Python file to analyze (required)
  • -d, --depth INTEGER: Maximum depth to traverse (default: 1)
  • -r, --project-root PATH: Project root directory (default: file's parent)
  • -c, --show-code: Display import statements from each file
  • --help: Show help message and exit

Enhanced CLI (pydeptree-enhanced)

All basic options plus:

  • -l, --check-lint / --no-check-lint: Enable/disable lint checking (default: enabled)
  • -s, --show-stats / --no-show-stats: Show/hide statistics summary table (default: enabled)

How It Works

PyDepTree uses Python's built-in AST (Abstract Syntax Tree) module to parse Python files and extract import statements. It then:

  1. Identifies which imports are part of your project (vs external libraries)
  2. Recursively analyzes imported modules up to the specified depth
  3. Builds a dependency graph while detecting circular imports
  4. Renders a beautiful tree visualization using Rich

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/tfaucheux/pydeptree.git
cd pydeptree

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install in development mode with dev dependencies
pip install -e ".[dev]"

Running Tests

# Run all tests (33 tests total: 5 basic + 28 enhanced)
pytest

# Run with coverage report (should show ~85% coverage)
pytest --cov=pydeptree --cov-report=term-missing

# Run only enhanced CLI tests
pytest tests/test_cli_enhanced.py

# Run linting (Note: sample_project/ contains intentional errors for demo purposes)
ruff check pydeptree/  # Check only the main package code (clean)
ruff check .           # Check everything (will show demo errors)
black --check .
mypy pydeptree

Note: The sample_project/ directory contains intentional linting errors for demonstration purposes. When running linting tools on the entire project, you'll see these demo errors alongside any real issues in the main codebase.

Building for Distribution

# Install build tools
pip install build twine

# Build distribution packages
python -m build

# Upload to TestPyPI (for testing)
twine upload --repository testpypi dist/*

# Upload to PyPI (for release)
twine upload dist/*

Notes

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Built with Click for CLI
  • Beautiful output powered by Rich
  • Inspired by various dependency analysis tools in the Python ecosystem

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

pydeptree-0.2.0.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pydeptree-0.2.0-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file pydeptree-0.2.0.tar.gz.

File metadata

  • Download URL: pydeptree-0.2.0.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for pydeptree-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3861f07d4e5f446fba6c7a88bfb8b297745ea262c8922161da8b5c2d4c4d4e19
MD5 1c7a2b9cdf1497b1a6112d10ed3c7ade
BLAKE2b-256 906256f5ab44253d5afefb603980ac875bd995677b1d58f4cdb6812e4dd67aec

See more details on using hashes here.

File details

Details for the file pydeptree-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pydeptree-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for pydeptree-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bfb9669c9374a073aecc3fcf3fcecea20271fd10a543aa00a5877f4d3e8ea24c
MD5 45035afea31ba6836b2fd7df5494aeda
BLAKE2b-256 d2052683f812b25e358d04ff4f808c27e23e6f175dccbf53a750e2c41a737fc4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page