Hikayeler

Reklam vermek için turkmmo@gmail.com

Python – Gereksiz Import Tespit Scripti

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

Mt2Hizmet

Level 3
TM Üye
Üye
Katılım
25 Ara 2024
Konular
5
Mesajlar
155
Online süresi
26g 69234s
Reaksiyon Skoru
64
Altın Konu
0
Başarım Puanı
52
TM Yaşı
1 Yıl 3 Ay 25 Gün
MmoLira
3,023
DevLira
9

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. 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()
 
Paylaşımınız İçin Teşekkürler.
 
PAYLAŞIM İÇİN TEŞEKKÜRLER,ELİNE SAĞLIK.
 

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

Geri
Üst