Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/felidz/carport

Dependency Graph from Python imports
https://github.com/felidz/carport

dependency-graph import-graph import-map python

Last synced: about 2 months ago
JSON representation

Dependency Graph from Python imports

Awesome Lists containing this project

README

        

# Carport

Dependen**c**y Gr**a**ph f**r**om **P**ython imp**ort**s (CARPORT).

[![PyPI
Version](https://img.shields.io/pypi/v/carport.svg?style=flat-square&color=blue)](https://pypi.org/project/carport/)
![GitHub
License](https://img.shields.io/github/license/felidz/carport.svg?style=flat-square&logo=github)

![GitHub commit
activity](https://img.shields.io/github/commit-activity/t/felidz/carport.svg?style=flat-square&logo=github)
![GitHub code size in
bytes](https://img.shields.io/github/languages/code-size/felidz/carport.svg?style=flat-square&logo=github)
![GitHub top
language](https://img.shields.io/github/languages/top/felidz/carport.svg?style=flat-square)

![GitHub last
commit](https://img.shields.io/github/last-commit/felidz/carport.svg?style=flat-square&logo=github&color=darkgreen)
![GitHub Actions CI Workflow
Status](https://img.shields.io/github/actions/workflow/status/felidz/carport/test.yaml?style=flat-square&logo=github&label=CI)
![GitHub Actions Docs Workflow
Status](https://img.shields.io/github/actions/workflow/status/felidz/carport/deploy.yaml?style=flat-square&logo=github&label=docs)

## Installation

``` sh
pip install carport
```

## Usage

``` python
from carport.core import ImportGraph

depg = ImportGraph(root = '..', project='carport')
# vars(depg)
```

``` python
# specify irrelevant modules
ignore_nodes = ['io', 'IPython', 'pprint', 'subprocess']
```

``` python
# export to dot string
dot = depg.to_dot(ignore_nodes=ignore_nodes)
display(dot)
```

'digraph {\n"carport.vis";\n"carport.core";\nnetworkx;\npathlib;\nast;\nkroki;\ngraphviz;\n"carport.vis" -> "carport.core" [key=0];\nnetworkx -> "carport.core" [key=0];\npathlib -> "carport.core" [key=0];\nast -> "carport.core" [key=0];\nkroki -> "carport.vis" [key=0];\ngraphviz -> "carport.vis" [key=0];\n}\n'

``` python
# draw graph with graphviz
dotg = depg.draw_dot(ignore_nodes=ignore_nodes)
display(dotg)
```

![](index_files/figure-commonmark/cell-5-output-1.svg)

``` python
# export to d2 string
d2 = depg.to_d2(ignore_nodes=ignore_nodes)
display(d2)
```

'\n vars: { \n d2-config: { \n layout-engine: elk \n } \n }\n direction: right\n **.style.border-radius: 99\n *.style.font: mono\n \npathlib -> carport.core\ngraphviz -> carport.vis\nsubprocess -> carport.vis\nast -> carport.core\ncarport.vis -> carport.core\nkroki -> carport.vis\nnetworkx -> carport.core\nio -> carport.core\nIPython -> carport.vis\nio: null\nIPython: null\npprint: null\nsubprocess: null'

``` python
# draw graph with d2 or kroki
d2g = depg.draw_d2(ignore_nodes=ignore_nodes, app='d2')
display(d2g)
```

![](index_files/figure-commonmark/cell-7-output-1.svg)

``` python
# for large graphs, you can use gravis
#! pip install gravis

import networkx as nx
import gravis as gv

g = depg.to_nx(ignore_nodes=ignore_nodes)
layout = nx.circular_layout(g, scale=4*len(g)**1.05)
for node_id, (x, y) in layout.items():
node = g.nodes[node_id]
node['x'], node['y'] = x, y
gv.d3(g, edge_curvature=1, node_hover_neighborhood = True, use_edge_size_normalization=True)
```

TODOs:

\[\] imports concerning `__init__.py`

\[\] `py_d2` to d2 (like `graphviz` to graphviz)

## Related

import-deps: [Github](https://github.com/schettino72/import-deps)

pydeps: [Github](https://github.com/thebjorn/pydeps)

snakefood3: [Github](https://github.com/Trim21/snakefood3)

kroki: [online editor](https://kroki.io/),
[python-interface](https://github.com/thorwhalen/kroki)

D2: [doc](https://d2lang.com/tour/text), [online
editor](https://play.d2lang.com/),
[python-interface](https://github.com/MrBlenny/py-d2)

## Statistics

![GitHub Repo
stars](https://img.shields.io/github/stars/felidz/carport.svg?style=flat-square&logo=github)
![PyPI -
Downloads](https://img.shields.io/pypi/dm/carport.svg?style=flat-square&logo=pypi)

## Copyright

Copyright © 2024 onward Felidz. All rights reserved, with certain parts
of the project specifically licensed and subject to different terms and
conditions, e.g., source code of the project under the Apache-2.0
license; you may not use this project except in compliance with the
license.

## Citation

BibTeX citation:

``` bibtex
@misc{felidz2024,
author = {Felidz},
title = {Carport},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/felidz/carport}}
}
```