[[!template id=gitrepo repo=depgraph]] This set of scripts scans a Python file for module dependencies, and generates code for [Graphviz dot][graphviz]. See [[call_graph]] for a script that generates dependency graphs *within* a module. Originally by Toby Dickenson, the scripts are good for giving you the "long view" on how your project is organized. I've altered the [originals][] a bit. My [py2depgraph.py][] also prints out path information for each module, so that you can show or hide module nodes based on those paths. For example, ignoring system modules to focus on your additions. My [depgraph2dot.py][] has an added method `depgraph2dot.invalidpath(module_name, path)` that you can override to determine the paths you like. I've also added the `depgraph2dot` methods * `is_Cext(module_name, path)`, * `Cext_depends(module_name, path)`, * `Cext_edge_attributes(module_name, Cext_name)`, * `Cext_node_attributes(Cext_name)`, and * `Cext_depcolor(Cext_name)` to detect and configure the shared C libraries extending Python, so you know where to look for the code your Python depends on. [[!template id=gitrepo repo=unfold_protein]] As example, here is the depgraph of my protein unfolding program `unfold.py` $ python py2depgraph.py unfold.py | python depgraph2dot.py | dot -T png -o depgraph.png with standard python modules in orange, python packages in hash-based colors, and C extension modules in light blue. Again, these are only the files containing either `wking` or `comedi` in their paths. [[!img depgraph.png class="scaled" alt="unfold.py dependency graph" title="unfold.py dependency graph"]] [graphviz]: http://www.graphviz.org [originals]: http://tarind.com/depgraph.html [py2depgraph.py]: http://git.tremily.us/?p=depgraph.git;a=blob_plain;f=py2depgraph.py;hb=HEAD [depgraph2dot.py]: http://git.tremily.us/?p=depgraph.git;a=blob_plain;f=depgraph2dot.py;hb=HEAD [[!tag tags/programming]] [[!tag tags/python]] [[!tag tags/tools]]