
ห้องสมุดเพื่อให้ผู้ใช้ตรวจสอบโฟลเดอร์โครงการซอฟต์แวร์ (เช่นไดเรกทอรีและไดเรกทอรีย่อย) และแยกข้อมูลที่เกี่ยวข้องทั้งหมดทั้งหมดเช่นคลาสวิธีการและเอกสารพารามิเตอร์คลาส (และวิธีการของพวกเขา) ฟังก์ชั่น ฯลฯ
ให้โฟลเดอร์ที่มีรหัส, inspect4py Will:
inspect4py จะส่งคืน Library เป็นประเภทหลัก)ข้อมูลเมตาทั้งหมดถูกสกัดเป็นไฟล์ JSON
Inspect4Py ทำงาน เฉพาะสำหรับโครงการ Python 3 เท่านั้น
inspect4py เพิ่มฟังก์ชั่นของกราฟการไหลของข้อมูลการจับภาพสำหรับแต่ละฟังก์ชั่นที่ได้รับแรงบันดาลใจจาก GraphCodebert: GitHub & Paper ภาพประกอบได้รับ:
| รหัสต้นฉบับ | รายการเอาต์พุต | ภาพเครือข่าย |
|---|---|---|
def max (a, b): | ('A', 3, 'Comes from', [], []) | ![]() |
inspect4py ใช้ ASTS โดยเฉพาะโมดูล AST ใน Python โดยเฉพาะการสร้างต้นไม้ของวัตถุ (ต่อไฟล์) ซึ่งคลาสทั้งหมดสืบทอดมาจาก AST.AST
inspect4py แยกวิเคราะห์แต่ละไฟล์อินพุตเป็นแผนผัง AST โดยแยกข้อมูลที่เกี่ยวข้องและจัดเก็บเป็นไฟล์ JSON นอกจากนี้ยังจับกระแสควบคุมของแต่ละไฟล์อินพุตโดยใช้ไลบรารีอีกสองรายการ:
นอกจากนี้เรายังใช้ docString_parser ซึ่งมีการสนับสนุนสำหรับ REST, Google และ DocStrings สไตล์ NUMPYDOC การทดสอบบางอย่าง (พื้นฐาน) โดยใช้ไลบรารีนี้สามารถพบได้ที่นี่
ในที่สุดเรานำ Pigar กลับมาใช้ใหม่เพื่อสร้างข้อกำหนดของที่เก็บโดยอัตโนมัติ นี่คือ funcionality เสริม เพื่อที่จะเปิดใช้งานอาร์กิวเมนต์ ( -r ) จะต้องระบุเมื่อเรียกใช้ Inspect4Py
กรุณาอ้างอิงกระดาษสาธิต 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}
}
ตรวจสอบให้แน่ใจว่าคุณมีการติดตั้ง Tree-Sitter จำเป็นต้องมีผู้ปฏิบัติงาน C ข้อมูลเพิ่มเติม:
pip install tree-sitter
โปรดทราบว่าหากไฟล์ ".o -so" ทำงานไม่ถูกต้องขอแนะนำให้เรียกใช้งานต่อไปนี้เพื่อสร้างไฟล์ SO สำหรับระบบปฏิบัติการของคุณ:
git clone https://github.com/tree-sitter/tree-sitter-python
python inspect4py/build.py
ตรวจสอบให้แน่ใจว่าคุณติดตั้ง graphviz:
sudo apt-get install graphviz
เราได้ทดสอบ inspect4py ใน Python 3.7+ เวอร์ชันที่เราแนะนำคือ Python 3.9
เราได้ทดสอบ inspect4py ใน Unix, MacOS และ Windows 11 (22621.1265)
inspect4py มีอยู่ใน PYPI! เพียงติดตั้งเหมือนแพ็คเกจปกติ:
pip install inspect4py
เสร็จแล้ว!
จากนั้นลองอัปเดตยูทิลิตี้ Python-Dev: sudo apt-get install python3.X-dev (โดยที่ x คือเวอร์ชัน Python ของคุณ)
เตรียม Python3 Enviroment เสมือนจริง cd ลงในโฟลเดอร์ inspect4py และติดตั้งแพ็คเกจดังนี้:
git clone https://github.com/SoftwareUnderstanding/inspect4py
cd inspect4py
pip install -e .
เสร็จแล้ว!
docstring_parser==0.7
astor
graphviz
click
pigar
setuptools==54.2.0
json2html
configparser
bigcode_astgen
GitPython
tree-sitter
หากคุณต้องการเรียกใช้การประเมินอย่าลืมเพิ่ม pandas ในชุดก่อนหน้า
คุณต้องติดตั้ง Docker
ถัดไปโคลนที่เก็บข้อมูลของ inspect4py :
git clone https://github.com/SoftwareUnderstanding/inspect4py/
สร้างภาพนักเทียบท่าสำหรับ inspect4py :
docker build --tag inspect4py:1.0 .
เรียกใช้ภาพ inspect4py :
docker run -it --rm inspect4py:1.0 /bin/bash
ตอนนี้คุณสามารถเรียกใช้ inspect4py :
root@e04792563e6a:/# inspect4py --help
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการดำเนินการ inspect4py โปรดดูส่วนด้านล่าง (การดำเนินการ)
โปรดทราบว่าเมื่อเรียกใช้ inspect4py กับ Docker คุณจะต้องจัดเตรียมเส้นทางไปยังที่เก็บเป้าหมายเพื่อวิเคราะห์ คุณสามารถทำได้โดย:
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
คำสั่งที่มีประโยชน์อื่น ๆ เมื่อใช้ Docker:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker image rm -f inspect4py:1.0
เครื่องมือสามารถดำเนินการเพื่อตรวจสอบไฟล์หรือไฟล์ทั้งหมดของไดเรกทอรีที่กำหนด (และไดเรกทอรีย่อย) ตัวอย่างเช่นสามารถใช้เพื่อตรวจสอบไฟล์ Python ทั้งหมดของที่เก็บ GitHub ที่กำหนด (ซึ่งเคยโคลนก่อนหน้านี้)
เครื่องมือโดยค่าเริ่มต้นจะจัดเก็บผลลัพธ์ในไดเรกทอรี OutputDir แต่ผู้ใช้สามารถระบุชื่อไดเรกทอรีของตนเองได้โดยใช้ -o หรือ --output FAGS
inspect4py --input_path <FILE.py | DIRECTORY> [--output_dir "OutputDir", --ignore_dir_pattern "__", ignore_file_pattern "__" --requirements --html_output]
เพื่อความชัดเจนเราได้เพิ่มคำสั่ง help เพื่ออธิบายพารามิเตอร์อินพุตแต่ละตัว:
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.
สำหรับเอกสารและตัวอย่างเพิ่มเติมโปรดดูเอกสารออนไลน์ของเรา
การมีส่วนร่วมในการแก้ไขปัญหาใด ๆ ในปัจจุบันยินดีต้อนรับ เพื่อที่จะผลักดันการบริจาคของคุณเพียงแค่ ผลักดันคำขอดึงของคุณไปยังสาขาการพัฒนา ( dev ) สาขาหลักมีเพียงรหัสที่เกี่ยวข้องกับรุ่นล่าสุด
เราขอขอบคุณ Laura Camacho ผู้ออกแบบโลโก้