Ana içeriğe geç
Kesit Python
Temel · Bilgisayarına geç

VS Code ile Python

VS Code'u doğru eklentiler, doğru yorumlayıcı ve venv ile kurar; hata ayıklayıcıyla adım adım ilerler, Ruff/Black ile kaydederken biçimlendirir, ayarları ekiple paylaşırsın.

Uygulamada aç, 8 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Editör değil, çalışma ortamı

Kurulum ve araçlar dersinde VS Code'u kurup ilk betiği çalıştırdın. Bu derste onu gerçek bir Python çalışma ortamına çeviriyoruz: doğru yorumlayıcıyı seçmek, hata ayıklayıcıyla kodun içine girmek, kaydederken otomatik biçimlendirmek ve ayarları ekiple paylaşmak. Bir geliştiricinin günlük verimini en çok etkileyen şey dilin kendisi değil, araçlarını ne kadar iyi kullandığıdır. print ekleyip silerek hata aramak ile bir kesme noktasında durup tüm değişkenleri görmek arasındaki fark, dakikalar ile saniyeler arasındaki farktır.

Kurulum ve eklentiler

code.visualstudio.com adresinden işletim sistemine uygun sürümü indir. Windows yükleyicisinde "Add to PATH" ve "Add 'Open with Code' action" kutularını işaretle. macOS'ta uygulamayı Applications'a sürükledikten sonra komut paletinden Shell Command: Install 'code' command in PATH komutunu çalıştır. Böylece terminalde bir klasördeyken code . yazarak o klasörü açabilirsin.

EklentiKimlik (ID)Ne verir
Pythonms-python.pythonYorumlayıcı seçimi, çalıştırma, test paneli; aşağıdakileri de getirir
Pylancems-python.vscode-pylanceOtomatik tamamlama (IntelliSense), tip denetimi, tanıma git
Python Debuggerms-python.debugpyKesme noktası, adım adım çalıştırma
Jupyterms-toolsai.jupyter.ipynb dosyaları ve etkileşimli pencere
Ruffcharliermarsh.ruffÇok hızlı denetleyici (linter) ve biçimlendirici
Black Formatterms-python.black-formatterBlack ile biçimlendirme (Ruff'a alternatif)

Dosya değil klasör aç

VS Code'un ayarları, yorumlayıcı seçimi ve hata ayıklama (debugging) yapılandırması çalışma alanına (workspace), yani açtığın klasöre bağlıdır. Tek bir .py dosyasını açarsan bunların hiçbiri düzgün çalışmaz. Her zaman File → Open Folder ile proje kökünü aç. Önerilen yapı:

anadolu-rapor/
├── .venv/                  # sanal ortam (git'e girmez)
├── .vscode/
│   ├── settings.json       # bu projenin ayarları (ekiple paylaşılır)
│   ├── launch.json         # hata ayıklama yapılandırmaları
│   └── extensions.json     # önerilen eklentiler
├── src/rapor/
│   ├── __init__.py
│   └── main.py
├── tests/
│   └── test_main.py
├── veri/siparisler.csv
├── .gitignore
├── pyproject.toml          # ya da requirements.txt
└── README.md

Yorumlayıcı seçimi

VS Code'daki en önemli tek ayar budur. Ctrl+Shift+P (macOS'ta Cmd+Shift+P) ile komut paletini aç, Python: Select Interpreter yaz. Liste; bulunan sistem Python'larını, conda ortamlarını ve proje klasöründeki .venv'i gösterir. .venv içindekini seç; sağ alt köşedeki durum çubuğunda 3.12.4 ('.venv': venv) gibi bir yazı görürsün. Listede yoksa "Enter interpreter path..." ile .venv/bin/python (Windows'ta .venv\Scripts\python.exe) yolunu elle ver.

Yanlış yorumlayıcı seçiliyse şu belirtileri görürsün: terminalde pip install pandas yapmışsın ama editör Import "pandas" could not be resolved diye sarı dalga çiziyor; ya da Çalıştır düğmesi ModuleNotFoundError veriyor. Paket bir Python'a, editör başka bir Python'a bakıyordur.

Yeni terminal, otomatik venvYorumlayıcıyı seçtikten sonra açtığın her entegre terminalde venv otomatik etkinleşir (python.terminal.activateEnvironment ayarı). Windows'ta bu, PowerShell yürütme ilkesine takılabilir; çözümünü Windows'ta Python kurulumu dersinde gördün.

Çalıştır düğmesi mi, terminal mi?

Sağ üstteki ▷ düğmesi (Run Python File) seçili yorumlayıcıyla python dosya.py komutunu entegre terminalde çalıştırır. Entegre terminali Ctrl+` ya da View → Terminal ile açarsın. İki yol arasındaki en büyük tuzak çalışma dizinidir (current working directory): betik open("veri/siparisler.csv") diyorsa, dosya betiğin yanında değil terminalin bulunduğu klasörde aranır. Çalıştır düğmesi varsayılan olarak çalışma alanının kökünden çalıştırır; sen terminalde src/rapor klasörüne girip çalıştırırsan aynı kod FileNotFoundError verir.

from pathlib import PurePosixPath

betik = PurePosixPath("/home/ayse/anadolu-rapor/src/rapor/main.py")
for cwd in ["/home/ayse/anadolu-rapor", "/home/ayse/anadolu-rapor/src/rapor"]:
    print("cwd'ye göre :", PurePosixPath(cwd) / "veri" / "siparisler.csv")

proje_koku = betik.parent.parent.parent
print("Betiğe göre :", proje_koku / "veri" / "siparisler.csv")

Gerçek kodda bunu Path(__file__).resolve().parent ile yaparsın: betiğin kendi klasöründen yola çıkan yol, nereden çalıştırılırsa çalıştırılsın aynı dosyayı bulur.

Hata ayıklayıcı (debugger)

Satır numarasının soluna tıklayınca (ya da F9) kırmızı bir nokta belirir: kesme noktası (breakpoint). F5 ile hata ayıklamayı başlatınca program o satıra gelince durur ve sol panelde şunları görürsün:

TuşEylemNe zaman
F5Başlat / devam et (sonraki kesme noktasına kadar)Hata ayıklamaya başlarken
F10Step Over: satırı çalıştır, fonksiyonun içine girmeFonksiyonun doğru çalıştığından eminsen
F11Step Into: çağrılan fonksiyonun içine girHatanın o fonksiyonda olduğundan şüpheleniyorsan
Shift+F11Step Out: fonksiyonun sonuna kadar çalıştır, çağırana dönYanlışlıkla içine girdiysen
Shift+F5DurdurSorunu buldun

Kesme noktasına sağ tıklayıp koşullu kesme noktası (conditional breakpoint) yapabilirsin: siparis["id"] == "AM-417" koşulu, 10.000 siparişlik döngüde yalnızca sorunlu kayıtta durur. Logpoint ise durmadan mesaj yazdırır; koda print eklemenin temiz hâlidir. Koddan durmak istersen breakpoint() yerleşik fonksiyonunu çağırabilirsin.

Aşağıdaki fonksiyonda bir hata var. Hata ayıklayıcıda for satırına kesme noktası koyup F10 ile ilerlesen, Variables panelinde toplam'ın her turda ne olduğunu görürdün; burada aynı bilgiyi elle yazdırıyoruz:

def sepet_toplami(sepet, indirim_orani):
    toplam = 0
    for urun in sepet:
        toplam = urun["fiyat"] * urun["adet"]          # hata: += olmalı
        print(f"  [izle] urun={urun['ad']:8} toplam={toplam}")
    return toplam * (1 - indirim_orani)

sepet = [{"ad": "Kalem", "fiyat": 12.5, "adet": 4},
         {"ad": "Defter", "fiyat": 45.0, "adet": 2},
         {"ad": "Silgi", "fiyat": 7.5, "adet": 1}]
print("Sonuç:", sepet_toplami(sepet, 0.1))

İzleme çıktısı toplam'ın birikmediğini, her turda üzerine yazıldığını hemen gösterir. Hata ayıklayıcı bu "izleme"yi senin yerine, koda dokunmadan yapar.

launch.json

Betiğine argüman, ortam değişkeni ya da belirli bir çalışma dizini vermek istiyorsan Run and Debug panelindeki "create a launch.json file" bağlantısıyla .vscode/launch.json oluştur:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Rapor: Ekim 2026",
            "type": "debugpy",
            "request": "launch",
            "module": "rapor.main",
            "args": ["--ay", "2026-10", "--sehir", "İzmir"],
            "cwd": "${workspaceFolder}",
            "env": {"RAPOR_ORTAM": "test"},
            "console": "integratedTerminal",
            "justMyCode": true
        }
    ]
}

${workspaceFolder} ve ${file} gibi değişkenler VS Code tarafından doldurulur. justMyCode: true, adım adım ilerlerken pandas gibi kütüphanelerin içine girmeni engeller.

Biçimlendirme ve denetim: Ruff, Black

Biçimlendirici (formatter) kodunu tek tip bir stile sokar: girintiler, boşluklar, satır uzunluğu, tırnaklar. Ekipte "virgülden sonra boşluk" tartışması biter. Ruff hem biçimlendirici hem denetleyicidir (kullanılmayan içe aktarma, tanımsız ad gibi hataları yakalar) ve çok hızlıdır. Black uzun süredir standart biçimlendiricidir; Ruff'ın biçimlendiricisi Black ile büyük ölçüde uyumludur. Birini seç, ikisini birden biçimlendirici yapma.

Ayarlar settings.json dosyasında JSON olarak tutulur. Komut paletinden Preferences: Open Workspace Settings (JSON) projeye özel dosyayı açar:

{
    // Python dosyaları için
    "[python]": {
        "editor.defaultFormatter": "charliermarsh.ruff",
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
            "source.organizeImports": "explicit"
        }
    },
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
    "python.analysis.typeCheckingMode": "basic",
    "python.testing.pytestEnabled": true,
    "editor.rulers": [88],
    "files.trimTrailingWhitespace": true,
}

Bu dosya aslında JSONC'dir (yorumlu JSON): // yorumlarına ve sondaki virgüle izin verir. Python'ın json modülü ikisini de kabul etmez. Ayar dosyasını bir betikle okumak ya da üretmek istersen bu farkı bilmen gerekir:

import json, re

ayar_metni = """{
    // Python dosyaları için
    "[python]": {"editor.formatOnSave": true},
    "editor.rulers": [88, 120],
}"""

satirlar = [s for s in ayar_metni.splitlines() if not s.strip().startswith("//")]
temiz = re.sub(r",\s*([}\]])", r"\1", "\n".join(satirlar))
ayarlar = json.loads(temiz)
print(ayarlar["[python]"]["editor.formatOnSave"], ayarlar["editor.rulers"])

ayarlar["editor.rulers"] = [88]
print(json.dumps(ayarlar, indent=4, ensure_ascii=False))

Dikkat: Python'daki True, JSON'da true olur; json.dumps bu çeviriyi senin yerine yapar. Ayar dosyasını f-string ile elle birleştirmek geçersiz JSON üretir.

Ayar katmanları

VS Code ayarları katmanlıdır: varsayılanlar → kullanıcı (User) ayarları (tüm projeler) → çalışma alanı (Workspace) ayarları (.vscode/settings.json). Sonraki katman öncekini ezer. Kişisel tercihlerin (yazı tipi, tema) kullanıcı ayarına, projenin kuralları (biçimlendirici, satır uzunluğu, yorumlayıcı yolu) çalışma alanı ayarına gider ve git'e eklenir.

IntelliSense ve tip ipuçları

Pylance kodunu yazarken analiz eder: nokta koyunca metotları önerir, fonksiyon imzasını gösterir, F12 ile tanıma gider, F2 ile bir adı tüm projede yeniden adlandırır. Önerilerin kalitesi tip ipuçlarına (type hints) bağlıdır. Parametrenin list[dict] olduğunu yazarsan Pylance döngüdeki elemanın sözlük olduğunu bilir; typeCheckingMode: "basic" açıksa yanlış türde argümanı kırmızıyla işaretler.

def indirimli_fiyat(fiyat: float, oran: float = 0.1) -> float:
    """Anadolu Market kampanya fiyatı."""
    return round(fiyat * (1 - oran), 2)

print(indirimli_fiyat(1499.90))
print(indirimli_fiyat.__annotations__)
print(indirimli_fiyat.__doc__)

Tip ipuçları çalışma zamanında zorunlu değildir; Python onları yalnızca __annotations__'ta saklar. Ama editör ve denetim araçları için altın değerindedir. Fare imlecini fonksiyon adının üzerine getirince görünen açıklama da belge dizesinden (docstring) gelir.

Kısayollar

EylemWindows / LinuxmacOS
Komut paletiCtrl+Shift+PCmd+Shift+P
Dosyaya hızlı gitCtrl+PCmd+P
Entegre terminalCtrl+`Ctrl+`
Belgeyi biçimlendirShift+Alt+FShift+Option+F
Satırı yorum yap / açCtrl+/Cmd+/
Tanıma git / yeniden adlandırF12 / F2F12 / F2
Seçimi Python terminalinde çalıştırShift+EnterShift+Enter
Hata ayıklamadan çalıştırCtrl+F5Ctrl+F5
Çoklu imleçAlt+TıkOption+Tık

Başka editörler

AraçGüçlü yanıZayıf yanıKime uygun
VS CodeÜcretsiz, hafif, her dil, dev eklenti ekosistemi, uzaktan geliştirmeKurulum ve ayar gerektirirÇoğu geliştirici ve analist
PyCharmPython'a özel derin analiz, güçlü yeniden düzenleme (refactoring), hazır test ve veritabanı araçlarıAğır; bazı özellikler ücretliBüyük Python projeleri, Django
ThonnyYeni başlayanlar için; ifadelerin adım adım nasıl hesaplandığını gösterirBüyük projeler için yetersizİlk haftalar, eğitim
IDLEPython ile birlikte gelir, kurulum yokÇok temelHızlı deneme, kısıtlı bilgisayar
SpyderMATLAB/RStudio benzeri, değişken gezginiGenel yazılım geliştirmede sınırlıBilimsel hesaplama, Anaconda kullanıcıları
JupyterLabHücre hücre keşif, grafik ve tablo çıktısıUzun kod ve test için uygun değilVeri analizi; Jupyter ve Colab dersinde
Gerçek işteIlgaz Bank'ın veri ekibinde yeni gelen biri depoyu klonlayıp VS Code'da açtığında sağ altta "Bu depo için önerilen eklentileri kurmak ister misiniz?" bildirimi çıkar; bu, .vscode/extensions.json dosyasının işidir. Ardından settings.json yorumlayıcıyı .venv'e, biçimlendiriciyi Ruff'a ayarlar ve herkes aynı stille kaydeder. Kod incelemelerinde (code review) "buraya boşluk koy" yorumları kaybolur; tartışma mantığa odaklanır. Ekip ayrıca launch.json'a "Günlük rapor (test verisi)" gibi hazır hata ayıklama yapılandırmaları koyar; böylece yeni gelen kişi ilk gün F5 ile sistemi uçtan uca çalıştırabilir.
Uzmanlaş

Hata ayıklayıcı nasıl çalışır?

Python, her satır çalışmadan önce haber veren bir izleme (trace) mekanizmasına sahiptir. Hata ayıklayıcılar bu kancayı (Python 3.12 ile gelen daha hızlı sys.monitoring arayüzünü ya da klasik sys.settrace'i) kullanarak kesme noktasındaki satıra gelince programı durdurur. Küçük bir izleyiciyle bunu kendin görebilirsin:

import sys

def izleyici(cerceve, olay, arg):
    if olay == "line" and cerceve.f_code.co_name == "faiz":
        yereller = {k: v for k, v in cerceve.f_locals.items()}
        print(f"satır {cerceve.f_lineno}: {yereller}")
    return izleyici

def faiz(anapara, oran, yil):
    tutar = anapara
    for _ in range(yil):
        tutar = tutar * (1 + oran)
    return round(tutar, 2)

sys.settrace(izleyici)
sonuc = faiz(10000, 0.4, 2)
sys.settrace(None)
print("Sonuç:", sonuc)

Uzaktan geliştirme

Remote - SSH eklentisiyle bir sunucudaki klasörü kendi bilgisayarındaymış gibi açarsın; kod sunucuda çalışır, sen yerel editörü kullanırsın. WSL eklentisi Windows'ta Linux ortamını, Dev Containers ise projeyi bir Docker konteynerinin içinde açar. Dev Containers ile .devcontainer/devcontainer.json dosyası Python sürümünü, eklentileri ve ayarları tanımlar; ekipteki herkes birebir aynı ortamda çalışır.

Testleri editörden çalıştırmak

python.testing.pytestEnabled açıkken Test panelinde tüm testler ağaç olarak görünür; tek bir testin yanındaki düğmeyle onu çalıştırabilir ya da hata ayıklayıcıyla içine girebilirsin. Test yazmayı Test yazma dersinde göreceksin.

Alıştırmalara geç (8)