
Bibliothek, mit der Benutzer einen Softwareprojektordner (dh ein Verzeichnis und seine Unterverzeichnisse) inspizieren und alle relevantesten Informationen wie Klasse, Methode und Parameterdokumentation, Klassen (und deren Methoden), Funktionen usw. extrahieren können, usw.
Bei einem Ordner mit Code wird inspect4py :
inspect4py Library als Haupttyp zurückgibt).Alle Metadaten werden als JSON -Datei extrahiert.
Inspect4Py arbeitet derzeit nur für Python 3 -Projekte .
inspect4py Die Funktionalität von Erfassungsdatenflussdiagramme für jede von GraphCodebert: Github & Paper inspirierte Funktion hinzugefügt. Die Illustration ist gegeben:
| Quellcode | Listenausgabe | NetworkX -Bild |
|---|---|---|
Def Max (a, b): | ('a', 3, 'Comesfrom', [], []) | ![]() |
inspect4py verwendet ASTS, insbesondere das AST -Modul in Python, wobei ein Baum von Objekten (pro Datei) erzeugt wird, dessen Klassen alle von ast.ast erben.
inspect4py analysiert jede der Eingabedateien als AST -Baum, extrahiert die relevanten Informationen und speichert sie als JSON -Datei. Darüber hinaus erfasst es den Steuerfluss jeder Eingabedatei (en) mithilfe von weiteren zwei Bibliotheken:
Wir verwenden auch docstring_parser, das Unterstützung für REST-, Google- und Numpydoc-Stil-Docstrings bietet. Einige (grundlegende) Tests, die mit dieser Bibliothek durchgeführt wurden, finden Sie hier.
Schließlich verwenden wir Pigar wieder, um die Anforderungen eines bestimmten Repositorys automatisch zu generieren. Dies ist eine optionale Funktionalität. Um das Argument ( -r ) zu aktivieren, muss beim Ausführen von Inspect4Py angegeben werden.
Bitte zitieren Sie unsere MSR 2022 Demo -Papier:
@inproceedings{FilgueiraG22,
author = {Rosa Filgueira and
Daniel Garijo},
title = {Inspect4py: {A} Knowledge Extraction Framework for Python Code Repositories},
booktitle = {{IEEE/ACM} 19th International Conference on Mining Software Repositories,
{MSR} 2022, Pittsburgh, PA, USA, May 23-24, 2022},
pages = {232--236},
publisher = {{IEEE}},
year = {2022},
url = {https://dgarijo.com/papers/inspect4py_MSR2022.pdf},
doi = {10.1145/3524842.3528497}
}
Stellen Sie sicher, dass Sie Baumsitter installiert haben, c komplizierter ist erforderlich, weitere Informationen:
pip install tree-sitter
Beachten Sie, dass wenn die Datei ".so" nicht ordnungsgemäß funktioniert, es empfohlen wird, die folgenden E -CHEDs auszuführen, um eine SO -Datei für Ihr Betriebssystem zu generieren:
git clone https://github.com/tree-sitter/tree-sitter-python
python inspect4py/build.py
Stellen Sie sicher, dass Sie GraphViz installiert haben:
sudo apt-get install graphviz
Wir haben inspect4py in Python 3.7+ getestet. Unsere empfohlene Version ist Python 3.9 .
Wir haben inspect4py in UNIX, MACOS und Windows 11 (22621.1265) getestet.
inspect4py ist in PYPI erhältlich! Installieren Sie es einfach wie ein reguläres Paket:
pip install inspect4py
Du bist fertig!
Versuchen Sie dann, die Python-dev-Dienstprogramme zu aktualisieren: sudo apt-get install python3.X-dev (wobei X Ihre Python-Version ist)
Bereiten Sie eine virtuelle Python3 -Umgebung vor, cd in den Ordner inspect4py und installieren Sie das Paket wie folgt:
git clone https://github.com/SoftwareUnderstanding/inspect4py
cd inspect4py
pip install -e .
Du bist fertig!
docstring_parser==0.7
astor
graphviz
click
pigar
setuptools==54.2.0
json2html
configparser
bigcode_astgen
GitPython
tree-sitter
Wenn Sie die Bewertungen ausführen möchten, vergessen Sie nicht, pandas zum vorherigen Satz hinzuzufügen.
Sie müssen Docker installieren lassen.
Als nächstes klonen Sie das Repository inspect4py :
git clone https://github.com/SoftwareUnderstanding/inspect4py/
Generieren Sie ein Docker -Image für inspect4py :
docker build --tag inspect4py:1.0 .
Führen Sie das Bild inspect4py aus:
docker run -it --rm inspect4py:1.0 /bin/bash
Jetzt können Sie inspect4py ausführen:
root@e04792563e6a:/# inspect4py --help
Weitere Informationen zu den Optionen zur Ausführungsoptionen inspect4py finden Sie im Abschnitt unten (Ausführung).
Beachten Sie, dass Sie beim Ausführen inspect4py mit Docker einen Pfad zum analysierenden Zielrepository bereitstellen müssen. Sie können dies tun von:
docker run -it --rm inspect4py:1.0 /bin/bash
# Docker image starts
root@e04792563e6a:/# git clone https://github.com/repo/id
root@e04792563e6a:/# inspect4py -i id
docker run -it -v -v $PWD:/out --rm inspect4py:1.0 /bin/bash
# Docker image starts
root@e04792563e6a:/# inspect4py -i /out/path/to/repo
Andere nützliche Befehle bei der Verwendung von Docker:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker image rm -f inspect4py:1.0
Das Tool kann ausgeführt werden, um eine Datei oder alle Dateien eines bestimmten Verzeichnisses (und deren Unterverzeichnisse) zu inspizieren. Beispielsweise kann es verwendet werden, um alle Python -Dateien eines bestimmten Github -Repositorys (das zuvor lokal kloniert wurde) zu inspizieren.
Das Tool speichert standardmäßig die Ergebnisse im OutputDir -Verzeichnis, aber Benutzer können ihren eigenen Verzeichnisnamen mithilfe von -o oder --output -Flags angeben.
inspect4py --input_path <FILE.py | DIRECTORY> [--output_dir "OutputDir", --ignore_dir_pattern "__", ignore_file_pattern "__" --requirements --html_output]
Für die Klarheit haben wir einen help hinzugefügt, um jeden Eingabeparameter zu erklären:
inspect4py --help
Usage: inspect4py [OPTIONS]
Options:
--version Show the version and exit.
-i, --input_path TEXT input path of the file or directory to
inspect. [required]
-o, --output_dir TEXT output directory path to store results. If
the directory does not exist, the tool will
create it.
-ignore_dir, --ignore_dir_pattern TEXT
ignore directories starting with a certain
pattern. This parameter can be provided
multiple times to ignore multiple directory
patterns.
-ignore_file, --ignore_file_pattern TEXT
ignore files starting with a certain
pattern. This parameter can be provided
multiple times to ignore multiple file
patterns.
-r, --requirements find the requirements of the repository.
-html, --html_output generates an html file of the DirJson in the
output directory.
-cl, --call_list generates the call list in a separate html
file.
-cf, --control_flow generates the call graph for each file in a
different directory.
-dt, --directory_tree captures the file directory tree from the
root path of the target repository.
-si, --software_invocation generates which are the software
invocation commands to run and test the
target repository.
-ast, -—abstract_syntax_tree generates abstract syntax tree in json format.
-sc, --source_code generates source code of each ast node.
-ld, --license_detection detects the license of the target repository.
-rm, --readme extract all readme files in the target repository.
-md, --metadata extract metadata of the target repository using
Github API.
-df, --data_flow extract data flow graph for every function, BOOL
-st, --symbol_table symbol table file location. STR
--help Show this message and exit.
Weitere Dokumentationen und Beispiele finden Sie in unserer Online -Dokumentation
Beiträge zur Beantwortung eines der aktuellen Probleme sind willkommen. Um Ihren Beitrag zu überschreiten, geben Sie einfach Ihre Pull -Anfrage in den Entwicklungszweig ( dev ) . Der Master -Zweig hat nur den Code, der der neuesten Version zugeordnet ist.
Wir möchten Laura Camacho, Designerin des Logos, danken