
Biblioteca para permitir a los usuarios inspeccionar una carpeta de proyecto de software (es decir, un directorio y sus subdirectorios) y extraer toda la información más relevante, como la documentación de clase, método y parámetros, clases (y sus métodos), funciones, etc.
Dada una carpeta con código, inspect4py :
inspect4py devolverá Library como su tipo principal)Todos los metadatos se extraen como un archivo JSON.
Inspect4py actualmente funciona solo para proyectos de Python 3 .
inspect4py agregó la funcionalidad de los gráficos de flujo de datos de captura para cada función inspirada en GraphCodebert: GitHub & Paper. Se da la ilustración:
| Código fuente | Salida de la lista | Imagen de Networkx |
|---|---|---|
def max (a, b): | ('A', 3, 'Comefrom', [], []) | ![]() |
inspect4py usa ASTS, más específicamente el módulo AST en Python, que genera un árbol de objetos (por archivo) cuyas clases se heredan de AST.AST.
inspect4py analiza cada uno de los archivos de entrada como un árbol AST, extrayendo la información relevante y almacenándola como un archivo JSON. Además, también captura el flujo de control de cada archivo de entrada, mediante el uso de otras dos bibliotecas:
También usamos DOCSTRING_PARSER, que tiene soporte para las documentos de estilo REST, Google y NumpyDoc. Algunas pruebas (básicas) realizadas con esta biblioteca se pueden encontrar aquí.
Finalmente, reutilizamos a PIGAR para generar automáticamente los requisitos de un repositorio determinado. Esta es una función opcional. Para activar el argumento ( -r ) debe indicarse al ejecutar Inspect4Py.
Por favor cita nuestro documento de demostración 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}
}
Asegúrese de que tenga instalado el titular de árbol, se necesita C Complier, más información:
pip install tree-sitter
Tenga en cuenta que si el archivo ".so" no funciona correctamente, se recomienda que ejecute los siguientes compromisos para generar un archivo SO para su sistema operativo:
git clone https://github.com/tree-sitter/tree-sitter-python
python inspect4py/build.py
Asegúrese de tener GraphViz instalado:
sudo apt-get install graphviz
Hemos probado inspect4py en Python 3.7+. Nuestra versión recomendada es Python 3.9 .
Hemos probado inspect4py en UNIX, MacOS y Windows 11 (22621.1265).
inspect4py está disponible en Pypi! Simplemente instálelo como un paquete normal:
pip install inspect4py
¡Ya terminaste!
Luego intente actualizar las utilidades de Python-Dev: sudo apt-get install python3.X-dev (donde x es su versión de Python)
Prepare un entorno virtual Python3, cd en la carpeta inspect4py e instale el paquete de la siguiente manera:
git clone https://github.com/SoftwareUnderstanding/inspect4py
cd inspect4py
pip install -e .
¡Ya terminaste!
docstring_parser==0.7
astor
graphviz
click
pigar
setuptools==54.2.0
json2html
configparser
bigcode_astgen
GitPython
tree-sitter
Si desea ejecutar las evaluaciones, no olvide agregar pandas al conjunto anterior.
Debe tener Docker instalado.
A continuación, clone el repositorio inspect4py :
git clone https://github.com/SoftwareUnderstanding/inspect4py/
Genere una imagen Docker para inspect4py :
docker build --tag inspect4py:1.0 .
Ejecute la imagen inspect4py :
docker run -it --rm inspect4py:1.0 /bin/bash
Ahora puedes ejecutar inspect4py :
root@e04792563e6a:/# inspect4py --help
Para obtener más información sobre las opciones de ejecución inspect4py , consulte la sección a continuación (Ejecución).
Tenga en cuenta que al ejecutar inspect4py con Docker, deberá necesitar proporcionar una ruta al repositorio de destino para analizar. Puedes hacer esto por:
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
Otros comandos útiles al usar Docker:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker image rm -f inspect4py:1.0
La herramienta se puede ejecutar para inspeccionar un archivo, o todos los archivos de un directorio determinado (y sus subdirectorios). Por ejemplo, se puede usar para inspeccionar todos los archivos de Python de un repositorio de GitHub dado (que se ha clonado previamente localmente).
La herramienta de forma predeterminada almacena los resultados en el directorio OutputDir , pero los usuarios pueden especificar su propio nombre del directorio utilizando los indicadores -o o --output .
inspect4py --input_path <FILE.py | DIRECTORY> [--output_dir "OutputDir", --ignore_dir_pattern "__", ignore_file_pattern "__" --requirements --html_output]
Para mayor claridad, hemos agregado un comando help para explicar cada parámetro de entrada:
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.
Para obtener documentación y ejemplos adicionales, eche un vistazo a nuestra documentación en línea
Las contribuciones para abordar cualquiera de los problemas actuales son bienvenidas. Para impulsar su contribución, simplemente presione su solicitud de extracción a la Rama de Desarrollo ( dev ) . La rama maestra solo tiene el código asociado a la última versión.
Nos gustaría agradecer a Laura Camacho, diseñadora del logotipo