views:

556

answers:

3

Dependency analysis programs help us organize code by controlling the dependencies between modules in our code. When one module is a circular dependency of another module, it is a clue to find a way to turn that into a unidirectional dependency or merge two modules into one module.

What is the best dependency analysis tool for Python code?

+1  A: 

I don't know what is the best dependency analysis tool. You could look into modulefinder – it's a module in the standard library that determines the set of modules imported by a script.

Of course, with python you have problems of conditional imports, and even potentially scripts calling __import__ directly, so it may not find everything. This is why tools like py2exe need special help to cope with packages like PIL.

John Fouhy
+5  A: 

I recommend using snakefood for creating graphical dependency graphs of Python projects. It detects dependencies nicely enough to immediately see areas for refactorisation. Its usage is pretty straightforward if you read a little bit of documentation.

Of course, you can omit the graph-creation step and receive a dependency dictionary in a file instead.

DzinX
Very interesting stuff: I was looking for a quick way to determine the files used by a given python file and this was perfect: it's so much faster than the other solutions I've seen (using modulefinder etc).I think when I get the time I'll write my own AST based solution but this did the trick for now: thanks!
jkp
@jkp snakefood is AST based, what's the problem?
joeforker
Thanks for tip. Exactly what I needed. Not that it is not very Windows friendly. I ended up using it in Linux.
lambacck
+1  A: 

PyStructure – Automated Structure and Dependency Analysis of Python Code

This is used for PyDev's refactoring features. http://pystructure.ifs.hsr.ch/trac/

joeforker
PyStructure includes a type inference engine.
joeforker