Python – Kullanılmayan Import Tespit Scripti

MG Yaşı
2 Ay 21 Gün
Katılım
2 Şub 2026
Konular
224
Mesajlar
368
Tepkime puanı
67
Puan
53
Konum
İstanbul

Python’un kendi kod analiz mekanizmasını kullanarak dosyaları inceler ve kullanılmayan importları satır numarasıyla birlikte raporlar.

Python:
import os
import ast

class ImportAnalyzer(ast.NodeVisitor):
    def __init__(self):
        self.imports = {}
        self.used_names = set()

    def visit_Import(self, node):
        for alias in node.names:
            name = alias.asname or alias.name.split('.')[0]
            self.imports[name] = node.lineno
        self.generic_visit(node)

    def visit_ImportFrom(self, node):
        if node.names[0].name == "*":
            return
        for alias in node.names:
            name = alias.asname or alias.name
            self.imports[name] = node.lineno
        self.generic_visit(node)

    def visit_Name(self, node):
        self.used_names.add(node.id)
        self.generic_visit(node)

    def visit_Attribute(self, node):
        if isinstance(node.value, ast.Name):
            self.used_names.add(node.value.id)
        self.generic_visit(node)


def safe_read(path):
    for enc in ("utf-8", "cp1254", "latin-1"):
        try:
            with open(path, "r", encoding=enc) as f:
                return f.read()
        except UnicodeDecodeError:
            continue
    # En son çare
    with open(path, "r", errors="ignore") as f:
        return f.read()


def find_unused_imports(py_file):
    try:
        source = safe_read(py_file)
        tree = ast.parse(source, filename=py_file)
    except (SyntaxError, ValueError):
        return None

    analyzer = ImportAnalyzer()
    analyzer.visit(tree)

    return {
        name: line
        for name, line in analyzer.imports.items()
        if name not in analyzer.used_names
    }


def scan_folder(root_folder):
    results = {}

    for root, _, files in os.walk(root_folder):
        for file in files:
            if file.endswith(".py"):
                path = os.path.join(root, file)
                unused = find_unused_imports(path)
                if unused:
                    results[path] = unused

    return results


if __name__ == "__main__":
    folder = input("Taranacak klasör yolu: ").strip()
    report = scan_folder(folder)

    if not report:
        print("🎉 Gereksiz import bulunamadı.")
    else:
        print("\n🚨 GEREKSİZ IMPORTLAR:\n")
        for file, imports in report.items():
            print(f"📄 {file}")
            for name, line in imports.items():
                print(f"   - {name} (satır {line})")
            print()
 
Moderatör tarafında düzenlendi:
Geri
Üst