
Bibliothèque pour permettre aux utilisateurs d'inspecter un dossier de projet logiciel (c'est-à-dire un répertoire et ses sous-répertoires) et extraire toutes les informations les plus pertinentes, telles que la classe, la méthode et la documentation des paramètres, les classes (et leurs méthodes), les fonctions, etc.
Compte tenu d'un dossier avec code, inspect4py Will:
inspect4py renverra Library comme type principal)Toutes les métadonnées sont extraites en tant que fichier JSON.
Inspect4Py fonctionne actuellement uniquement pour les projets Python 3 .
inspect4py a ajouté la fonctionnalité des graphiques de flux de données de capture pour chaque fonction inspirée de GraphCodebert: GitHub & Paper. L'illustration est donnée:
| Code source | Liste de la sortie | Image NetworkX |
|---|---|---|
def max (a, b): | ('a', 3, 'Comefrom', [], []) | ![]() |
inspect4py utilise ASTS, plus spécifiquement le module AST dans Python, générant une arbre d'objets (par fichier) dont les classes héritent toutes de AST.ast.
inspect4py analyse chacun des fichiers d'entrée en tant qu'arborescence AST, extrait les informations pertinentes et les stocker en tant que fichier JSON. En outre, il capture également le flux de contrôle de chaque fichier d'entrée, en utilisant deux autres bibliothèques:
Nous utilisons également docstring_parser, qui prend en charge le repos, Google et les docstrings de style NumpyDoc. Certains tests (de base) effectués à l'aide de cette bibliothèque peuvent être trouvés ici.
Enfin, nous réutilisons Pigar pour générer automatiquement les exigences d'un référentiel donné. Il s'agit d'une fonction facultative. Afin d'activer l'argument ( -r ) doit être indiqué lors de l'exécution d'inspect4py.
Veuillez citer notre papier de démonstration MSR 2022:
@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}
}
Assurez-vous que vous avez installé des arbres, C compierre est nécessaire, plus d'informations:
pip install tree-sitter
Notez que si le fichier ".so" ne fonctionne pas correctement, il est recommandé d'exécuter les combinaisons suivantes pour générer un fichier SO pour votre système d'exploitation:
git clone https://github.com/tree-sitter/tree-sitter-python
python inspect4py/build.py
Assurez-vous que Graphviz soit installé:
sudo apt-get install graphviz
Nous avons testé inspect4py dans Python 3.7+. Notre version recommandée est Python 3.9 .
Nous avons testé inspect4py dans Unix, MacOS et Windows 11 (22621.1265).
inspect4py est disponible dans PYPI! Installez-le simplement comme un package ordinaire:
pip install inspect4py
Vous avez terminé!
Ensuite, essayez de mettre à jour les utilitaires Python-Dev: sudo apt-get install python3.X-dev (où x est votre version python)
Préparez un environnement virtuel Python3, cd dans le dossier inspect4py et installez le package comme suit:
git clone https://github.com/SoftwareUnderstanding/inspect4py
cd inspect4py
pip install -e .
Vous avez terminé!
docstring_parser==0.7
astor
graphviz
click
pigar
setuptools==54.2.0
json2html
configparser
bigcode_astgen
GitPython
tree-sitter
Si vous souhaitez exécuter les évaluations, n'oubliez pas d'ajouter pandas à l'ensemble précédent.
Vous devez installer Docker.
Ensuite, clone le référentiel inspect4py :
git clone https://github.com/SoftwareUnderstanding/inspect4py/
Générer une image docker pour inspect4py :
docker build --tag inspect4py:1.0 .
Exécutez l'image inspect4py :
docker run -it --rm inspect4py:1.0 /bin/bash
Vous pouvez maintenant exécuter inspect4py :
root@e04792563e6a:/# inspect4py --help
Pour plus d'informations sur les options d'exécution inspect4py , veuillez consulter la section ci-dessous (exécution).
Notez que lors de l'exécution inspect4py avec Docker, vous devrez fournir un chemin vers le référentiel cible à analyser. Vous pouvez le faire par:
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
Autres commandes utiles lors de l'utilisation de Docker:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker image rm -f inspect4py:1.0
L'outil peut être exécuté pour inspecter un fichier ou tous les fichiers d'un répertoire donné (et ses sous-répertoires). Par exemple, il peut être utilisé pour inspecter tous les fichiers Python d'un référentiel GitHub donné (qui a été précédemment cloné localement).
L'outil par défaut stocke les résultats dans le répertoire OutputDir , mais les utilisateurs peuvent spécifier leur propre nom de répertoire en utilisant des drapeaux -o ou --output .
inspect4py --input_path <FILE.py | DIRECTORY> [--output_dir "OutputDir", --ignore_dir_pattern "__", ignore_file_pattern "__" --requirements --html_output]
Pour plus de clarté, nous avons ajouté une commande help pour expliquer chaque paramètre d'entrée:
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.
Pour des documents et des exemples supplémentaires, veuillez consulter notre documentation en ligne
Les contributions pour résoudre l'un des problèmes actuels sont les bienvenues. Afin de pousser votre contribution, repoussez votre demande de traction vers la branche de développement ( dev ) . La branche Master n'a que le code associé à la dernière version.
Nous tenons à remercier Laura Camacho, designer du logo