DepCycle
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
- Repository: https://github.com/Matricess/depcycle.git
- Tests: https://github.com/Matricess/depcycle/tree/main/tests
- Design commentary: https://github.com/Matricess/depcycle/blob/main/DESIGN.md
- Sample dependency graph:
examples/(local)
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-eflags 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:
- CLI Layer (
cli.py): Handles user input and orchestrates the workflow - Configuration (
config.py): Manages all settings and options - Graph Layer (
graph/): Core data structures for the dependency graph - Parsing Layer (
parsing/): Discovers files and extracts imports using AST - Rendering Layer (
rendering/): Generates visualizations in various formats
Key Classes
DepCycleCLI: Main entry point that handles command-line argumentsDependencyGraph: Central data structure holding all module relationshipsModuleNode: Represents a single Python module/fileProject: Discovers and manages Python files in a projectASTParser: Extracts imports using Python's AST moduleGraphvizVisualizer: Renders graphs as PNG/SVG imagesHtmlVisualizer: Generates interactive HTML visualizations
How It Works
- Discovery: Recursively scans the project directory for all
.pyfiles - Parsing: Uses Python's AST to extract import statements from each file
- Resolution: Maps import strings to actual modules in the project
- Classification: Categorizes modules as LOCAL, THIRD_PARTY, or STDLIB
- Analysis: Detects circular dependencies using depth-first search
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| depcycle-0.2.5.tar.gz | 25.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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