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

Windows'ta Python kurulumu

python.org yükleyicisinin her ekranını, Store takma adı tuzağını, py başlatıcısını, PATH'i, PowerShell yürütme ilkesini ve en sık on bir kurulum hatasının teşhisini öğrenirsin.

Uygulamada aç, 9 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ç.

Hangi sürüm?Kasım 2026'da öneri Python 3.14. Bu dersteki komutlarda 3.12 geçen yerlere kurduğun sürümü yaz. Tarayıcıdaki motorun 3.12 olması seçimini bağlamaz. Windows'ta python.org artık Python install manager'ı öne çıkarıyor, klasik yükleyici de sunuluyor; ikisi de olur.

Neden ayrı bir Windows dersi?

Kurulum ve araçlar dersinde Python'ı kurmayı kısaca gördün. Bu ders, o kısa anlatımın "ama bende çalışmadı" kısmıdır. Windows'ta Python kurulumu çoğu zaman beş dakika sürer; sorun çıktığında ise saatler alabilir, çünkü hata mesajı genellikle asıl nedeni söylemez. 'python' is not recognized diyen bir terminal sana "PATH ortam değişkeninde Python klasörü yok" demez. Bu derste kurulumun her ekranını, Windows'un bir komutu nasıl bulduğunu ve en sık karşılaşılan hataların gerçek nedenini öğreneceksin. Amaç ezber değil, teşhis yapabilmek: bir sonraki bilgisayarda ya da bir ekip arkadaşının ekranında sorunu iki dakikada çözmek.

Anadolu Market'in veri ekibine yeni katılan bir stajyer düşün. İlk gün kurumsal dizüstü bilgisayarına Python kuruyor, VS Code'u açıyor ve ilk betiği çalıştırınca terminal Microsoft Store'u açıyor. Bu derste o sorunun neden olduğunu ve neden tek bir ayar düğmesiyle çözüldüğünü göreceksin.

Dört kurulum yolu

YolArtısıEksisiKimin için
python.org yükleyicisiResmî, tam denetim, py başlatıcısı gelirEkranları doğru işaretlemek gerekirÇoğu kişi için önerilen yol
Microsoft StoreYönetici izni istemez, otomatik güncellenirBazı klasörlere yazma kısıtlı, py başlatıcısı yokOkul ya da kilitli bilgisayar
wingetTek komut, betikle tekrarlanabilirKurulum seçeneklerini görmezsinBirden çok makine kuran, otomasyon seven
Anaconda/MinicondaBilimsel paketler hazır gelirBüyük, kendi ortam sistemi varVeri bilimi; Jupyter ve Colab dersinde

python.org yükleyicisi adım adım

python.org/downloads adresinden Windows installer (64-bit) dosyasını indir (örneğin python-3.12.4-amd64.exe). "embeddable package" başka programların içine gömülmek içindir; öğrenme için değil.

  1. İlk ekran: en altta iki kutu var. "Use admin privileges when installing py.exe" başlatıcıyı tüm kullanıcılar için kurar (yönetici izni ister; yoksa işaretini kaldır). "Add python.exe to PATH" kutusunu mutlaka işaretle; varsayılan olarak işaretsiz gelir ve sorunların yarısı buradan çıkar.
  2. Install Now seçersen Python kullanıcı klasörüne kurulur: C:\Users\ayse\AppData\Local\Programs\Python\Python312. Yönetici izni gerekmez. Yeni başlıyorsan bu yeterlidir.
  3. Customize installation seçersen "Optional Features" ekranı gelir: pip (paket yükleyici, açık kalsın), tcl/tk and IDLE (basit editör ve tkinter), Python test suite (gerekmez), py launcher (açık kalsın), for all users (başlatıcıyı herkese kurar).
  4. Advanced Options ekranında: Install Python 3.12 for all users (Program Files'a kurar, yönetici ister), Associate files with Python (.py dosyasına çift tıklayınca çalışsın), Add Python to environment variables (ilk ekrandaki PATH kutusunun aynısı), Precompile standard library. Kurulum yolunu C:\Python312 gibi kısa, boşluksuz, Türkçe karaktersiz bir yere almak ileride çok baş ağrısı önler.
  5. Son ekran: "Disable path length limit" düğmesi çıkarsa tıkla. Windows'un 260 karakterlik yol sınırını kaldırır; derin klasörlü paketlerde pip hatalarını önler.

Kurulum bitince yeni bir terminal aç (açık olan terminal eski PATH'i hatırlar) ve doğrula:

python --version
py --version
python -m pip --version
where python

Python'a kendisini anlattırmak da mümkün. Aşağıdaki kod, hangi yorumlayıcının çalıştığını ve nereye kurulduğunu gösterir; "yanlış Python çalışıyor" şüphesinde ilk bakılacak yer burasıdır.

import sys, platform

print("Sürüm      :", platform.python_version())
print("Ana / alt  :", sys.version_info.major, sys.version_info.minor)
print("Yorumlayıcı:", sys.executable or "(tarayıcıda yol yok)")
print("Kurulum    :", sys.prefix)
print("İşletim    :", platform.system())
print("64 bit mi  :", sys.maxsize > 2**32)
print("3.10+ mı   :", sys.version_info >= (3, 10))
Sürüm karşılaştırmanın doğru yolusys.version_info bir demet (tuple) gibi davranır; sys.version_info >= (3, 10) sayı sayı karşılaştırır. Sürümü metin olarak karşılaştırma: "3.9" > "3.12" ifadesi True döner çünkü metinler karakter karakter karşılaştırılır ve "9" > "1".

Microsoft Store tuzağı: App execution aliases

Windows 10 ve 11, Python kurulu olmasa bile C:\Users\ayse\AppData\Local\Microsoft\WindowsApps klasörüne python.exe ve python3.exe adında küçük takma ad (alias) dosyaları koyar. Bunlar gerçek Python değildir; çalışınca Store'u açar ya da Python was not found; run without arguments to install from the Microsoft Store yazar. WindowsApps klasörü PATH'te genellikle senin Python klasöründen önce geldiği için, Python'ı kurmuş olsan bile takma ad kazanır.

Çözüm: Ayarlar → Uygulamalar → Gelişmiş uygulama ayarları → Uygulama yürütme diğer adları (App execution aliases) ekranında "Uygulama yükleyici python.exe" ve "python3.exe" satırlarını kapat. Ardından yeni terminal aç. Store sürümünü bilerek kullanıyorsan bu takma adlar gerçek Python'ı gösterir; o durumda sorun yoktur.

py başlatıcısı: birden çok sürümün trafik polisi

python.org yükleyicisi py.exe adlı bir başlatıcı (launcher) kurar. Bu küçük program PATH'e bakmaz; Windows kayıt defterindeki kurulu Python'ları bilir ve istediğin sürümü çalıştırır. PATH karıştığında en güvenilir araç budur.

KomutNe yapar
pyVarsayılan (genelde en yeni) Python'ı açar
py -3.12 betik.pyBetiği özellikle 3.12 ile çalıştırır
py --list (ya da py -0)Kurulu sürümleri listeler; yıldızlı olan varsayılandır
py -0pSürümleri dosya yollarıyla listeler
py -3.12 -m pip install requestsPaketi tam olarak 3.12'ye kurar
py -3.12 -m venv .venv3.12 tabanlı sanal ortam (virtual environment) oluşturur
 -V:3.12 *        Python 3.12 (64-bit)
 -V:3.11          Python 3.11 (64-bit)

py --list çıktısı yukarıdaki gibidir. PY_PYTHON=3.11 ortam değişkeniyle varsayılanı değiştirebilirsin.

PATH nedir, Windows bir komutu nasıl bulur?

PATH, klasör yollarını noktalı virgülle (Windows) ayırarak tutan bir ortam değişkenidir (environment variable). Terminale python yazdığında Windows önce bulunduğun klasöre, sonra PATH'teki klasörlere soldan sağa bakar ve python.exe (ya da .bat, .cmd) bulduğu ilk klasördekini çalıştırır. Gerisine bakmaz. İki Python kuruluysa hangisinin çalışacağını PATH sırası belirler.

where python                       # CMD ve PowerShell: tüm eşleşmeleri sırayla gösterir
$env:Path -split ';'               # PowerShell: PATH'i satır satır göster
echo %PATH%                        # CMD: PATH'i tek satırda göster
Get-Command python | Format-List   # PowerShell: çalışacak olanın tam yolu

PowerShell'de where yerine where.exe yazman gerekebilir; çünkü where orada Where-Object komutunun kısaltmasıdır ve sessizce hiçbir şey yazdırmaz.

path_metni = r"C:\Windows\system32;C:\Users\ayse\AppData\Local\Microsoft\WindowsApps;C:\Users\ayse\AppData\Local\Programs\Python\Python312\Scripts;C:\Users\ayse\AppData\Local\Programs\Python\Python312;;C:\Program Files\Git\cmd"

for sira, klasor in enumerate(path_metni.split(";"), start=1):
    if not klasor:
        print(sira, "(boş girdi)")
        continue
    isaret = "  <-- Python" if "python" in klasor.lower() else ""
    print(sira, klasor + isaret)

PATH'i kalıcı değiştirmek için Başlat menüsüne "ortam değişkenleri" yaz → Hesabınız için ortam değişkenlerini düzenleyin. Üstte kullanıcı değişkenleri, altta (yönetici gerektiren) sistem değişkenleri vardır. Windows ikisini birleştirir: önce sistem PATH'i, sonra kullanıcı PATH'i. Değişiklikten sonra açık terminaller eski değeri tutar; yeni terminal (bazen VS Code'u tamamen kapatıp açmak) gerekir.

where komutunun yaptığını Python ile taklit edelim. Gerçek bilgisayarda dosyalar diskte; burada var olan dosyaları bir küme (set) olarak veriyoruz.

import ntpath

path_klasorleri = [
    r"C:\Users\ayse\AppData\Local\Microsoft\WindowsApps",
    r"C:\Python312",
    r"C:\Python312\Scripts",
]
diskteki_dosyalar = {
    r"C:\Users\ayse\AppData\Local\Microsoft\WindowsApps\python.exe",
    r"C:\Python312\python.exe",
    r"C:\Python312\Scripts\pip.exe",
}

def where(komut):
    bulunanlar = []
    for klasor in path_klasorleri:
        aday = ntpath.join(klasor, komut + ".exe")
        if aday in diskteki_dosyalar:
            bulunanlar.append(aday)
    return bulunanlar

for komut in ["python", "pip", "git"]:
    sonuc = where(komut)
    print(komut, "->", sonuc[0] if sonuc else "tanınmıyor")

Çıktıdaki python satırı Store takma adını gösteriyor: gerçek Python kurulu olduğu hâlde ilk sırada takma ad var. ntpath modülü Windows yol kurallarını her işletim sisteminde uygular; Linux'ta çalışırken bile ters bölüyle yol birleştirebilirsin.

PowerShell mı CMD mi? Yürütme ilkesi ve venv

İşPowerShellCMD
PATH'i görmek$env:Path -split ';'echo %PATH%
Geçici değişken$env:PYTHONUTF8 = "1"set PYTHONUTF8=1
venv etkinleştirme.venv\Scripts\Activate.ps1.venv\Scripts\activate.bat
Komutun yeriGet-Command pythonwhere python
Ekranı temizlecls / Clear-Hostcls

Windows Terminal ve VS Code varsayılan olarak PowerShell açar. Sanal ortamı (ayrıntısı Sanal ortam ve paket yönetimi dersinde) oluşturup etkinleştirdiğinde ilk karşılaşacağın engel şudur:

.venv\Scripts\Activate.ps1 cannot be loaded because running scripts is disabled on this system.

Bu, PowerShell'in yürütme ilkesi (execution policy) güvenlik ayarıdır; varsayılan "Restricted" hiçbir betiğin çalışmasına izin vermez. Yalnızca kendi kullanıcın için, yönetici gerektirmeden şu ayar yeterlidir:

Get-ExecutionPolicy -List
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
py -3.12 -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip

RemoteSigned: kendi yazdığın yerel betikler çalışır, internetten indirilen betikler imza ister. Unrestricted ya da Bypass kullanma; gereğinden geniştir. Etkinleştirme başarılıysa istemin (prompt) başında (.venv) görürsün; deactivate ile çıkarsın.

import ntpath, posixpath, sys

def venv_python(proje, windows=True):
    if windows:
        return ntpath.join(proje, ".venv", "Scripts", "python.exe")
    return posixpath.join(proje, ".venv", "bin", "python")

print(venv_python(r"C:\dev\anadolu-rapor"))
print(venv_python("/home/ayse/anadolu-rapor", windows=False))
print("Şu an sanal ortamda mıyım?", sys.prefix != sys.base_prefix)
Neden Scripts?Windows'ta venv içindeki çalıştırılabilir dosyalar Scripts klasörüne, macOS ve Linux'ta bin klasörüne konur. VS Code bu farkı kendisi bilir; ama bir yapılandırma dosyasına elle yol yazarken ya da CI betiğinde bu fark sık hata kaynağıdır.

winget, birden çok sürüm ve kaldırma

winget search Python.Python
winget install Python.Python.3.12
winget install Python.Python.3.13
winget upgrade Python.Python.3.12
winget uninstall Python.Python.3.11

Birden çok sürüm yan yana sorunsuz yaşar; her biri kendi klasöründedir. Kural basit: projeyi sürüme bağla, PATH'e değil. Her proje kendi venv'ini py -3.12 -m venv .venv ile oluşturur; o venv etkinken python hep doğru sürümdür. PATH'teki "varsayılan" Python yalnızca hızlı denemeler içindir.

Kaldırma: Ayarlar → Uygulamalar → "Python 3.11.x" → Kaldır (ya da winget uninstall). Kaldırma sonrası üç artık kalabilir: PATH'teki ölü girdiler (elle sil), %LOCALAPPDATA%\Programs\Python altındaki boş klasör ve %LOCALAPPDATA%\pip\Cache önbelleği. Ölü PATH girdisi zararsız görünür ama where çıktısını kafa karıştırıcı yapar.

Belirti → neden → çözüm

BelirtiNedenÇözüm
'python' is not recognized / "terimi cmdlet olarak tanınmıyor"Python klasörü PATH'te yokYükleyiciyi tekrar çalıştır → Modify → "Add to environment variables"; ya da py kullan
python yazınca Store açılıyor / "Python was not found"WindowsApps takma adı PATH'te öndeApp execution aliases'ta python.exe ve python3.exe'yi kapat
'pip' is not recognizedScripts klasörü PATH'te yokHer zaman python -m pip ya da py -m pip kullan
Activate.ps1 cannot be loadedPowerShell yürütme ilkesi RestrictedSet-ExecutionPolicy -Scope CurrentUser RemoteSigned
SSL: CERTIFICATE_VERIFY_FAILED (pip install)Kurumsal ağ trafiği kendi sertifikasıyla inceliyorBT'den kurum sertifikasını iste: pip config set global.cert C:\certs\kurum.pem; --trusted-host yalnız geçici çözüm
PermissionError / "Access is denied"Program Files'a yöneticisiz paket kurmaya çalışmak ya da dosya başka programda açıkvenv kullan; VS Code ve açık terminalleri kapatıp tekrar dene
Kullanıcı adı "Şükrü" ya da "Ayşe Yılmaz": bazı araçlar yol hatası veriyorTürkçe karakter ve boşluk eski araçlarda kodlama/tırnak sorunu yaratırPython'ı C:\Python312'ye, projeleri C:\dev'e koy; yolları tırnakla yaz
Yanlış sürüm çalışıyor (3.9 bekliyorsun 3.12 geliyor)PATH sırası; where python'da ilk satır başka kurulumPATH'te sırayı değiştir ya da py -3.12 / venv kullan
UnicodeEncodeError: Türkçe karakter yazdırırkenEski konsol kod sayfası (cp857/cp1254)Windows Terminal kullan; PYTHONUTF8=1 ortam değişkenini ayarla
Kurdum ama komut hâlâ yokTerminal PATH değişmeden önce açılmıştıYeni terminal aç; VS Code'u tamamen kapatıp aç
pip: "No such file or directory" çok uzun yolda260 karakter yol sınırıYükleyicideki "Disable path length limit" ya da projeyi kısa yola taşı
Hata mesajının ilk satırı değil son satırıpip ve Python hatalarında asıl neden genellikle en alttaki satırdadır. Uzun bir kırmızı metin gördüğünde aşağıdan yukarı oku ve son satırı aynen arat.
Gerçek işteKurumsal bilgisayarlarda çoğu zaman yönetici iznin olmaz, internet bir vekil sunucu (proxy) üzerinden geçer ve trafik kurum sertifikasıyla incelenir. Bu yüzden ekipler kurulum adımlarını README'ye yazar: "python.org 3.14, kurulum adımları, ardından py -3.14 -m venv .venv". Yeni gelen kişi bu listeyi izler, sorun çıkarsa where python, py --list ve python -m pip config list çıktılarını destek kanalına yapıştırır. Bu üç çıktı, sorunların büyük kısmını uzaktan teşhis etmeye yeter.
Uzmanlaş

Sessiz kurulum ve otomasyon

BT ekipleri yükleyiciyi ekran açmadan çalıştırır. Komut satırı seçenekleri ekrandaki kutuların karşılığıdır:

python-3.12.4-amd64.exe /quiet InstallAllUsers=0 PrependPath=1 Include_launcher=1 Include_test=0

Böyle bir komutu Python'da shlex ile parçalara ayırabilirsin. shlex.split, kabuk kurallarını uygular: çift tırnak içindeki boşluklar korunur ve tırnaklar atılır. Tırnak dışındaki ters bölü ise kaçış karakteri sayılıp silinir; Windows yollarını komutlarda tırnakla yazmanın bir nedeni de budur.

import shlex

komut = 'python-3.12.4-amd64.exe /quiet InstallAllUsers=0 PrependPath=1 TargetDir="C:\\Program Files\\Python312"'
parcalar = shlex.split(komut)
print(parcalar[0])
for p in parcalar[1:]:
    if "=" in p:
        anahtar, deger = p.split("=", 1)
        print(f"  ayar   {anahtar:16} = {deger}")
    else:
        print(f"  bayrak {p}")

print(shlex.split(r"TargetDir=C:\Python312"))   # tırnaksız: ters bölü kaybolur!

Sanal ortamda olup olmadığını anlamak

sys.prefix çalışan ortamın kökünü, sys.base_prefix o ortamın türetildiği Python kurulumunu gösterir. İkisi farklıysa bir venv içindesin. Her venv'in kökünde pyvenv.cfg dosyası vardır; içindeki home = C:\Python312 satırı ortamın hangi Python'dan oluşturulduğunu söyler. Bu yüzden Python'ı kaldırıp yeniden kurduğunda eski venv'ler bozulur: home artık var olmayan bir yeri gösterir. Çözüm venv'i silip yeniden oluşturmaktır; venv taşınabilir bir şey değildir.

PYTHONUTF8 ve kodlama

Python 3.15 ile UTF-8 modu varsayılan oldu (Ekim 2026). 3.14 ve öncesinde Windows'ta open() varsayılan olarak sistemin kod sayfasını kullanır. Türkçe veriyle çalışıyorsan her zaman open(yol, encoding="utf-8") yaz ya da PYTHONUTF8=1 değişkenini kalıcı olarak ayarla.

Alıştırmalara geç (9)