[ANN] PyStructure: Structure and Dependency Analyser for Python Projects
robin at nibor.org
Mon Apr 14 17:27:17 CEST 2008
Hi Python developers,
We are happy to announce our first release of PyStructure, a structure
and dependency analyser for Python code (written in Java). It is now in
a state where it can parse and analyse real-world projects (with
limitations, see below) and show the results in Structure101g, a
To try it out with your projects, download pystructure.zip from the
following address and follow the instructions in the README file:
We are two students working on this as our bachelor thesis. The project
page can be found at:
We are very eager to hear your feedback about our project. What do you
think about the idea of a 'structural analyser' for a dynamic language
like Python? Does it work for your project (probably not very well at
Our project's goal is to develop a structural analyser for programs
written in the Python programming language. The analyser should be able
to parse an application's source code, analyse it and then generate a
graph representing the internal structure of the project.
As Python is a dynamic language most of the interesting details (i.e.
type) are not known before the application is running. The analyser has
to 'guess' the correct type by analysing the code base.
The project is licensed under the LGPL (v2 or later), see the COPYING file.
Although the engine already supports a wide variety of cases it still
lacks some very important features:
- No support for inheritance
Currently the engine ignores everything that involves inheritance.
For example if a method is implemented in a base class it won't be
found if it was called on an instance of a sub class.
- Type of list/dict elements is not known
The type of container elements cannot be determined yet. For projects
which heavily rely on lists this means that a lot of types can't be
- Only little support for built-ins
Only a few built-in operations are recognised. For example the type
inference engine doesn't yet know that len("str") returns an integer.
We are working on tackling these issues in the next two milestones and
we hope to improve the accuracy of the engine significantly.
Our library (especially the type inferencer we use) might be interesting
for other applications. For example:
- Code completion and navigation in IDEs
And it might improve the accuracy of tools which:
- Detect unused/dead code
- Look for possible bugs in code (like FindBugs for Java)
- Do type checks and optimisations at compile time
- DDP: Demand-Driven Analysis with Goal Pruning by Lex Spoon
- Headway Software
More information about the Python-list