PYCG generiert Aufrufdiagramme für Python -Code unter Verwendung einer statischen Analyse. Es unterstützt effizient
Sie können die vollständige Methodik sowie eine vollständige Bewertung auf dem ICSE 2021 -Papier lesen.
Sie können PYCG wie folgt zitieren. Vitalis Salis, Thodoris Sotiropoulos, Panos Louridas, Diomidis Spinellis und Dimitris Mitropoulos. PYCG: Practical Call Graph Generation in Python. In der 43. Internationalen Konferenz über Software Engineering, ICSE '21 , 25. -28. Mai 2021.
PYCG ist archiviert. Aufgrund der begrenzten Verfügbarkeit sind keine weiteren Entwicklungsverbesserungen geplant. Ich freue mich, jedem zu helfen, der eine Gabel schaffen möchte, um die Entwicklung fortzusetzen.
PYCG ist in Python3 implementiert und benötigt Python Version 3.4 oder höher. Es hat auch keine Abhängigkeiten. Einfach:
pip install pycg
~ >>> pycg -h
usage: __main__.py [-h] [--package PACKAGE] [--fasten] [--product PRODUCT]
[--forge FORGE] [--version VERSION] [--timestamp TIMESTAMP]
[--max-iter MAX_ITER] [--operation {call-graph,key-error}]
[--as-graph-output AS_GRAPH_OUTPUT] [-o OUTPUT]
[entry_point ...]
positional arguments:
entry_point Entry points to be processed
optional arguments:
-h, --help show this help message and exit
--package PACKAGE Package containing the code to be analyzed
--fasten Produce call graph using the FASTEN format
--product PRODUCT Package name
--forge FORGE Source the product was downloaded from
--version VERSION Version of the product
--timestamp TIMESTAMP
Timestamp of the package's version
--max-iter MAX_ITER Maximum number of iterations through source code. If not specified a fix-point iteration will be performed.
--operation {call-graph,key-error}
Operation to perform. Choose call-graph for call graph generation (default) or key-error for key error detection on dictionaries.
--as-graph-output AS_GRAPH_OUTPUT
Output for the assignment graph
-o OUTPUT, --output OUTPUT
Output path
Die folgenden Befehlszeilenargumente sollten nur dann verwendet, wenn --fasten erforderlich ist:
--product : Der Name des Pakets.--forge : Quelle Das Paket wurde heruntergeladen.--version : Die Version des Pakets.--timestamp : Der Zeitstempel der Paketversion. Die Anrufkanten erfolgen in Form einer Adjazenzliste, in der eine Kante (src, dst) als Eintrag von dst in der Liste der Taste src dargestellt wird:
{
"node1": ["node2", "node3"],
"node2": ["node3"],
"node3": []
}
Für eine aktuelle Beschreibung des Befestigungsformates finden Sie auf das Befestigungswiki.
Derzeit experimentieren wir mit der Identifizierung potenzieller ungültiger Wörterbuchzugriffe auf Python -Wörterbüchern (Schlüsselfehler). Das Ausgabeformat für Schlüsselfehler ist eine Liste von Wörterbüchern, die enthalten sind:
[{
"filename": "mod.py",
"lineno": 2,
"namespace": "mod.<dict1>",
"key": "key2"
},
{
"filename": "mod.py",
"lineno": 8,
"namespace": "mod.<dict1>",
"key": "nokey"
}]
Alle Einstiegspunkte sind bekannt und wir wollen das einfache JSON -Format
~ >>> pycg --package pkg_root pkg_root/module1.py pkg_root/subpackage/module2.py -o cg.json
Alle Einstiegspunkte sind nicht bekannt und wir wollen das einfache JSON -Format
~ >>> pycg --package django $(find django -type f -name "*.py") -o django.json
Wir wollen das Befestigungsformat:
~ >>> pycg --package pypi_pkg --fasten --product "pypipkg" --forge "PyPI"
--version "0.1" --timestamp 42
pypi_pkg/module1.py pkg_root/subpackage/module2.py -o cg.json
Installieren Sie zuerst das Mock -Paket aus dem Root -Verzeichnis:
pip3 install mock
Führen Sie einfach die Tests aus, indem Sie die Tests ausführen:
make test