# pysonar2
**Repository Path**: mirrors_sourcegraph/pysonar2
## Basic Information
- **Project Name**: pysonar2
- **Description**: a type inferencer and indexer for Python
- **Primary Language**: Unknown
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-23
- **Last Updated**: 2026-02-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### PySonar2 - a type inferencer and indexer for Python
PySonar2 is a type inferencer and indexer for Python, which performs
sophisticated interprocedural analysis to infer types. It is one of the
underlying technologies that power the code search engine Sourcegraph, where it has been used to
index hundreds of thousands of open source Python repositories, producing a
globally connected network of Python code. An older version of PySonar is used
internally at Google, producing high-quality semantic code index for millions of
lines of Python code.
To understand its properties, please refer to my blog post:
- http://yinwang0.wordpress.com/2010/09/12/pysonar
#### How to build
mvn package
#### How to use
PySonar2 is mainly designed as a library for Python IDEs, other developer
tools and code search engines, so its interface may not be as appealing as an
end-user tool, but for your understanding of the library's capabilities, a
reasonably nice demo program has been built.
You can build a simple "code-browser" of the Python 2.7 standard library with
the following command line:
java -jar target/pysonar-2.0-SNAPSHOT.jar /usr/lib/python2.7 ./html
This will take a few minutes. You should find some interactive HTML files inside
the _html_ directory after this process.
To get a JSON dump of the information PySonar2 outputs, run:
java -classpath ./target/pysonar-2.0-SNAPSHOT.jar org.yinwang.pysonar.JSONDump path/to/directory/containing/python/code '' ''
#### Tests
After building, run `java -classpath ./target/pysonar-2.0-SNAPSHOT.jar org.yinwang.pysonar.Test ./tests`.
To re-generate expected test output, run `java -classpath ./target/pysonar-2.0-SNAPSHOT.jar org.yinwang.pysonar.Test
./tests -exp true`.
##### Development tips
PySonar2 outputs an AST cache to the directory `/tmp/pysonar2` (or `//pysonar2` where `TEMPDIR` is your
system's standard temp directory. Be sure to remove this directory when making changes and re-running PySonar2 commands
(including tests).
#### System requirements
* Python 2.7.x
* Python 3.x if you have Python3 files
* Java 7
* maven
##### Environment variables
PySonar2 uses CPython's ast package to parse Python code, so please make sure
you have `python` or `python3` installed and pointed to by the `PATH`
environment variable. If you have them in different names, please make symbol
links.
`PYTHONPATH` environment variable is used for locating the Python standard
libraries. It is important to point it to the correct Python library, for
example
export PYTHONPATH=/usr/lib/python2.7
If this is not set up correctly, you may find suboptimal results.
##### Memory usage
PySonar2 doesn't need much memory to do analysis compared to other static
analysis tool of its class. 1.5Gb is probably enough for analyzing a medium
sized project such as Python's standard library or Django. But for generating
the HTML files, you may need quite some memory (~2.5Gb for Python 2.7 standard
lib). This is due to the highlighting code is putting all code and their HTML
tags into the memory.
#### License (GNU AGPLv3)
PySonar - a type inferencer and indexer for Python
Copyright (c) 2013-2014 Yin Wang
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .