Skip to main content

DepCycle

Python 3.8+ License: MIT Downloads Downloads per month

DepCycle is a command-line tool to visualize Python project dependencies. It helps developers understand complex codebases by automatically generating visual maps of how modules are connected, making it easy to spot architectural problems like circular dependencies and untangle coupled code.

Features

  • Automatic Dependency Discovery: Scans Python projects and builds a complete dependency graph
  • Cycle Detection: Identifies circular dependencies that can lead to architectural issues
  • Flexible Visualization: Multiple output formats including PNG, SVG, and HTML
  • Smart Filtering: Exclude specific patterns, third-party libraries, or standard library modules
  • AST-Based Parsing: Uses Python's Abstract Syntax Tree for accurate import detection

Links

Prerequisites

  • Python 3.8 or higher
  • Graphviz (for PNG/SVG output)

Installing Graphviz

macOS:

brew install graphviz

Ubuntu/Debian:

sudo apt-get install graphviz

Windows: Download and install from Graphviz website

Installation

Install via pip (recommended)

pip install depcycle

or 

# install directly from GitHub
pip install git+https://github.com/Matricess/depcycle.git

Install from a clone (editable dev setup)

git clone https://github.com/Matricess/depcycle.git
cd depcycle
pip install -e .[dev]

If you prefer requirements files, pip install -r requirements.txt will install runtime deps plus pytest for the test suite.

Usage

Basic Usage

Analyze a Python project and generate a dependency graph (PNG by default):

depcycle /path/to/your/project

The output is written to dependencies.png in the current working directory.

Note: By default DepCycle skips common noise directories such as venv/, .venv/, .git/, __pycache__/, node_modules/, build artifacts, and Python cache folders. Use -e flags if you need extra exclusions, or disable the defaults via the API (Project.get_python_files(include_defaults=False)).

Using as a Module

python -m depcycle /path/to/your/project

Advanced Options

Generate a different output format or explicit location:

depcycle /path/to/project --format svg --output diagrams/dependencies.svg

Exclude specific directories or files (glob syntax):

depcycle /path/to/project -e venv -e ".*/tests/*" -e "*.test.py"

Focus only on local code:

depcycle /path/to/project --no-third-party --no-stdlib

Full help:

depcycle --help

Tests

Tests live under tests/ and run without touching the sample projects in examples/.

pip install -e .[dev]
pytest -q

See tests/README.md for a quick summary.

Project Structure

depcycle/
├── src/
│   └── depcycle/
│       ├── __init__.py
│       ├── __main__.py
│       ├── cli.py                  # Command-line interface
│       ├── config.py               # Configuration management
│       ├── graph/
│       │   ├── __init__.py
│       │   ├── dependency_graph.py # Core graph logic
│       │   └── module_node.py      # Module representation
│       ├── parsing/
│       │   ├── __init__.py
│       │   ├── ast_parser.py       # AST-based import parsing
│       │   └── project.py          # File discovery
│       └── rendering/
│           ├── __init__.py
│           ├── interface.py        # Visualization interface
│           └── visualizers.py      # Output implementations
├── requirements.txt
├── README.md
└── LICENSE

Architecture

DepCycle follows a clean, modular architecture:

  1. CLI Layer (cli.py): Handles user input and orchestrates the workflow
  2. Configuration (config.py): Manages all settings and options
  3. Graph Layer (graph/): Core data structures for the dependency graph
  4. Parsing Layer (parsing/): Discovers files and extracts imports using AST
  5. Rendering Layer (rendering/): Generates visualizations in various formats

Key Classes

  • DepCycleCLI: Main entry point that handles command-line arguments
  • DependencyGraph: Central data structure holding all module relationships
  • ModuleNode: Represents a single Python module/file
  • Project: Discovers and manages Python files in a project
  • ASTParser: Extracts imports using Python's AST module
  • GraphvizVisualizer: Renders graphs as PNG/SVG images
  • HtmlVisualizer: Generates interactive HTML visualizations

How It Works

  1. Discovery: Recursively scans the project directory for all .py files
  2. Parsing: Uses Python's AST to extract import statements from each file
  3. Resolution: Maps import strings to actual modules in the project
  4. Classification: Categorizes modules as LOCAL, THIRD_PARTY, or STDLIB
  5. Analysis: Detects circular dependencies using depth-first search
  6. Visualization: Renders the graph using Graphviz or HTML

Example Output

When you run DepCycle, you'll see output like:

Analyzing project: /path/to/my-project
Building dependency graph...
Found 42 modules
✓ No circular dependencies detected
Generating PNG visualization...
✓ Visualization saved to: dependencies.png

If circular dependencies are found:

⚠️  Warning: Found 2 circular dependency cycles!
  Cycle 1: app.models.user → app.services.auth → app.models.user
  Cycle 2: app.core.database → app.core.config → app.core.database

Analytics

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

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

Acknowledgments

Built as part of a Software Design and Testing course project (IT643).

Release files for depcycle 0.2.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for depcycle 0.2.5
File Size Uploaded
depcycle-0.2.5.tar.gz 25.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for depcycle 0.2.5
File Interpreter ABI Platform
depcycle-0.2.5-py3-none-any.whl Python 3 none any Details

Total release size: 49.6 kB

Release files / depcycle-0.2.5.tar.gz

Download URL depcycle-0.2.5.tar.gz
Size 25.2 kB
Tags Source
SHA-256 checksum
How to use checksums
77aeea346c26c3ec2f5c5c581f8e03265ec1ed5a97f4bd6357e713d1aeec2e7d
BLAKE2b-256 checksum
How to use checksums
0242c5e0160abb1208a3c5b119b45b007ad19eed1f3798bf9b6ea81c0fd43370
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 14, 2025.

Transparency log

Release files / depcycle-0.2.5-py3-none-any.whl

Download URL depcycle-0.2.5-py3-none-any.whl
Size 24.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a0c815dec9ba7dda6bb37b2ab7c644f573ed54ed2dd8dcab6f852dd1ee7c1eae
BLAKE2b-256 checksum
How to use checksums
476ddac81517ce21b0e2295d9fbb336f154814efe31cf09a6a874ad0ac70d476
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 14, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.5 This release

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page