Alesta WEB

Kısa cevap: Python 3.15'in son sürümü 1 Ekim 2026'ya planlandı (PEP 790). Öne çıkan yenilikler şunlar: tembel içe aktarma (lazy import, PEP 810), yerleşik değiştirilemez sözlük frozendict (PEP 814), yerleşik sentinel tipi (PEP 661), comprehension içinde * ve ** ile açma (PEP 798), işletim sisteminden bağımsız olarak varsayılan UTF-8 (PEP 686) ve çalışan bir sürece bağlanabilen örneklemeli profilleyici (Tachyon, PEP 799). Bu yazıda her birini kısa kod örnekleriyle anlatıyor, güncellemeden önce kontrol etmeniz gerekenleri listeliyoruz (Python 3.15 new features, what's new).

Çıkış tarihi ve destek süresi (Release schedule)
Python her yıl ekim başında yeni bir ana sürüm çıkarıyor. 3.15 için takvim PEP 790'da yazılı: özellik dondurma mayıs ayında yapıldı, ikinci sürüm adayı (3.15.0rc2) 1 Eylül 2026'da çıktı, son sürüm 1 Ekim 2026'ya planlandı. Sürüm adayından sonra yeni özellik eklenmediği için bu yazıdaki liste kesindir.
Destek tarafında da değişiklik yok. 3.15 iki yıl boyunca hata düzeltmesi, ardından üç yıl yalnızca güvenlik yaması alacak. Ömür sonu (end of life) Ekim 2031. Aynı hafta 3.14.8, 3.13.16 ve 3.12.15 bakım sürümleri de yayımlandı. Hemen 3.15'e geçmeyecekseniz en azından kullandığınız dalın son yamasını kurun.
lazy import: açılışı hızlandıran tembel içe aktarma (PEP 810)
Büyük bir uygulama açılırken onlarca modülü içe aktarır. Bunların bir kısmı belki hiç kullanılmaz: komut satırı aracında yalnızca --help çalıştırdığınızda bile pandas yüklenir. Bu sorunu çözmek için yıllardır fonksiyon içine import yazmak gibi elle yöntemler kullanılıyordu. 3.15 bunu dilin parçası yapıyor:
lazy import json
lazy from pathlib import Path
print("Başlıyor...") # json ve pathlib henüz yüklenmedi
veri = json.loads('{"anahtar": 1}') # json burada, ilk kullanımda yüklenir
lazy anahtar sözcüğü isteğe bağlıdır; mevcut kodunuz aynen çalışmaya devam eder. Kazanç en çok kısa ömürlü süreçlerde görülür: CLI araçları, sunucusuz (serverless) fonksiyonlar, test çalıştırıcıları. Uzun süre açık kalan bir web sunucusunda modüller zaten bir kez yüklendiği için fark açılış süresiyle sınırlı kalır.
Dikkat: Modül yüklenirken yan etki üreten kodlar (kayıt defterine eklenme, eklenti tanıtma, ortam değişkeni okuma gibi) artık ilk kullanıma kadar çalışmaz. Bu tür modülleri lazy yapmadan önce yüklenme sırasına bağımlı olup olmadıklarına bakın.
frozendict ve sentinel: iki yeni yerleşik tip (PEP 814, PEP 661)
frozendict, değiştirilemeyen (immutable) bir sözlüktür. İçeriği hash'lenebilir olduğu sürece kendisi de hash'lenebilir; yani sözlük anahtarı ya da küme elemanı olarak kullanılabilir. Yapılandırma nesneleri, önbellek anahtarları ve fonksiyonlara "bunu değiştirme" diye geçilen veriler için uygundur.
>>> ayar = frozendict(host="localhost", port=5432)
>>> ayar["port"] = 3306
TypeError: 'frozendict' object does not support item assignment
>>> onbellek = {ayar: "bağlantı-1"} # anahtar olarak kullanılabilir
Bugüne kadar bunun için types.MappingProxyType ya da üçüncü parti paketler kullanılıyordu. MappingProxyType yalnızca salt okunur bir görünüm verir, hash'lenemez; frozendict ise gerçek bir değer tipidir.
sentinel ise "değer verilmedi" durumunu None'dan ayırmak için kullanılır. Bir fonksiyonda None geçerli bir değerse, parametrenin hiç verilmediğini anlamak için şimdiye kadar _EKSIK = object() yazılırdı. Bu yöntem çalışır ama hata ayıklamada <object object at 0x7f...> gibi anlamsız bir çıktı verir. Yeni tip okunur bir ad taşır:
EKSIK = sentinel(name="EKSIK")
def guncelle(kayit, aciklama=EKSIK):
if aciklama is EKSIK:
return kayit # parametre hiç verilmedi
kayit.aciklama = aciklama # None da geçerli bir değer
return kayit
Comprehension içinde açma (Unpacking in comprehensions, PEP 798)
İç içe listeleri düzleştirmek için ya iki for'lu bir comprehension yazılırdı ya da itertools.chain kullanılırdı. Artık yıldız doğrudan comprehension içinde çalışıyor:
listeler = [[1, 2], [3, 4], [5]]
[*l for l in listeler] # [1, 2, 3, 4, 5]
sozlukler = [{"a": 1}, {"b": 2}]
{**s for s in sozlukler} # {'a': 1, 'b': 2}
Küçük bir değişiklik ama okunabilirliği belirgin şekilde artırıyor; özellikle API yanıtlarını birleştirirken sık kullanılacaktır.
Varsayılan UTF-8: Windows kullanıcıları dikkat (PEP 686)
Bu sürümün en çok kişiyi etkileyecek değişikliği muhtemelen budur. Önceki sürümlerde open("dosya.txt") çağrısı, kodlama belirtilmezse işletim sisteminin yerel ayarını kullanırdı. Türkçe Windows'ta bu genellikle cp1254 demekti. Aynı kod Linux sunucuda UTF-8, geliştiricinin Windows makinesinde cp1254 ile çalışıyor ve "ş", "ğ", "İ" harfleri bozuluyordu (UnicodeDecodeError, mojibake).
3.15 ile birlikte Python, işletim sisteminden bağımsız olarak UTF-8 modunda başlıyor. Yeni yazılan kod için bu iyi haber. Ancak eski, cp1254 ile kaydedilmiş CSV veya metin dosyalarını kodlama belirtmeden okuyan betikler artık hata verebilir. Sizde durum buysa iki seçenek var:
- Kalıcı çözüm: dosyayı açarken kodlamayı açıkça yazın:
open("eski.csv", encoding="cp1254"). - Geçici çözüm: eski davranışa dönmek için
PYTHONUTF8=0ortam değişkenini ya da-X utf8=0seçeneğini kullanın.
Biz Alesta WEB olarak yıllardır her projede encoding="utf-8" yazmayı kural edindik. Bu değişiklik o kuralı gereksiz kılmıyor, çünkü kodunuzun eski Python sürümlerinde de aynı davranması gerekebilir.
Tachyon: çalışan sürece bağlanan profilleyici (PEP 799)
Profil araçları yeni bir profiling paketi altında toplandı: profiling.tracing eski deterministik izleyiciyi, profiling.sampling ise yeni örneklemeli profilleyici Tachyon'u içeriyor. Tachyon'un asıl farkı, yeniden başlatmadan çalışan bir sürece bağlanabilmesi. Canlı ortamda yavaşlayan bir işçiyi kapatmadan incelemek mümkün oluyor:
# Çalışan bir sürece bağlan (PID ile)
python -m profiling.sampling attach 12345
# Bir betiği baştan profille
python -m profiling.sampling run betik.py
# asyncio görevleriyle birlikte anlık yığın dökümü
python -m profiling.sampling dump 12345 --async-aware
Saniyede bir milyona kadar örnekleme yapabiliyor; duvar saati, CPU, GIL tutma ve istisna modları var. Çıktı olarak pstats, flamegraph, Firefox Profiler (gecko) biçimi, ısı haritası ve canlı terminal arayüzü sunuyor. Daha önce bu iş için py-spy gibi harici araçlar kuruluyordu.
Hata mesajları, JIT, typing ve diğerleri
- Daha akıllı hata mesajları: Başka dillerden gelen alışkanlıklar yakalanıyor.
[1, 2].push(3)yazarsanız Python "Did you mean '.append'?" diye öneriyor. Nesnenin içindeki bir alt nesnede bulunan öznitelik için.inner.areagibi yol önerisi geliyor. - Serbest iş parçacıklı (free-threaded) yapı: 3.14'te deneysel olmaktan çıkan GIL'siz yapı için C eklentilerine kararlı ABI desteği geldi (PEP 803,
abi3t). Paket yazarları artık tek bir derlemeyle free-threaded sürümleri destekleyebiliyor. GIL'siz Python'u daha önce Python 3.14 free-threading rehberimizde anlatmıştık. - JIT derleyici geliştirildi, hâlâ deneysel ve varsayılan olarak kapalı.
- Typing: TypedDict için tipli ek alanlar (PEP 728),
TypeForm(PEP 747) ve ayrık taban sınıflar (PEP 800). - Yeni modül ve fonksiyonlar:
math.integermodülü (PEP 791),math.signbit(),math.fmax(),bytearray.take_bytes(). - .pth dosyalarına alternatif: Paketlerin açılışta kod çalıştırması için güvenli
.startdosyaları geldi (PEP 829). .pth içindekiimportsatırları tedarik zinciri saldırılarında kötüye kullanılıyordu. - Frame pointer'lar varsayılan olarak açık (PEP 831). Böylece perf gibi sistem profilleyicileri Python yığınlarını doğru okuyabiliyor.
Güncellemeden önce kontrol listesi (Upgrade checklist)
- Bağımlılıklarınıza bakın: C eklentisi içeren paketlerin (numpy, lxml, psycopg vb.) 3.15 için hazır wheel'i var mı? PyPI sayfasında
cp315etiketini arayın. - Dosya okuma kodunu tarayın: Kodlama belirtmeden
open(),read_text()ya dacsvkullanan yerleri bulun:grep -rn "open(" --include=*.py . - Testleri iki sürümde çalıştırın: CI'da 3.14 ile 3.15'i yan yana koşun. uv kullanıyorsanız
uv python install 3.15ile kurmak saniyeler sürer. - Uyarılara dikkat edin:
python -W error::DeprecationWarningile çalıştırıp kaldırılması planlanan API'leri şimdiden temizleyin. - Canlıya acele etmeyin: Üretim sunucusu için genellikle ilk bakım sürümünü (3.15.1) beklemek mantıklıdır.
Sık sorulan sorular
Python 3.15 ne zaman çıkıyor?
Son sürüm 1 Ekim 2026'ya planlandı. Sürüm adayı 3.15.0rc2 1 Eylül 2026'da yayımlandı.
Python 3.15 ne kadar süre desteklenecek?
Ekim 2031'e kadar. İlk iki yıl hata düzeltmesi, sonraki üç yıl güvenlik yaması alır.
lazy import mevcut kodumu bozar mı?
Hayır. Yeni anahtar sözcüğü isteğe bağlıdır; kullanmadığınız sürece içe aktarmalar eskisi gibi hemen yüklenir.
Windows'ta Türkçe karakterli dosyalarım bozulur mu?
Dosyalarınız UTF-8 ise hayır, aksine sorunlar azalır. Eski cp1254 dosyalarını kodlama belirtmeden okuyorsanız encoding="cp1254" ekleyin ya da geçici olarak PYTHONUTF8=0 kullanın.
3.14'ten 3.15'e hemen geçmeli miyim?
Yeni projelerde evet. Mevcut üretim sistemlerinde önce bağımlılık ve test kontrolü yapın, mümkünse 3.15.1'i bekleyin.
Kaynaklar (References)
Python ile otomasyon, panel ya da API entegrasyonu gerektiren bir işiniz varsa Alesta WEB web yazılım hizmetlerine göz atabilir, iletişim sayfasından bize yazabilirsiniz.
Kapak fotoğrafı: Rubaitul Azad / Unsplash

