mavzermete 1
mavzermete
xranzei 1
xranzei
Manwe Work 1
Manwe Work
noisiv 1
noisiv
Hikaye Ekle

Python – Gereksiz Import Tespit Scripti

5.00 yıldız(lar) 1 Değerlendirme Değerlendirenler

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Gereksiz Import Tespit

Python projelerinde kullanılmayan importları tespit etmek için hazırladığım küçük bir analiz scriptini paylaşıyorum.
Python’un kendi kod analiz yapısını kullanarak dosyaları inceler. 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()
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst