En son 2.x versiyonu olan 2.7, ömür boyu destek olarak nitelendirilen geliştirilmiş ve genişletilmiş destek birimiyle 2010 yılının ortalarında piyasa çıktı. 2.x kullanıcıları, 3.x versiyonun aktif gelişim altında geliştirilmesine ve 4 yıldan beri stabil sürümlerinin piyasaya sürülmesinee rağmen çok da fazla büyük bir değişiklik yapılmadığını göreceklerdir. Piyasaya çıkacak olan bir sonraki sürüm ise 2014 yılında bizlerle buluşacak olan Python 3.4 olacak. Bu da, örneğin Python 3.x sürümlerinde standart olarak sunulan son olarak gerçekleştirilen tüm kütüphane geliştirmelerini içeren bür sürüm olacağı anlamına geliyor.
Python dilinin yaratıcısı Guido van Rossum, yavaş yavaş uyumluluk sistemini değiştirerek Python 2.x’i piyasadan kaldırmaya karara verdi. Rossum, bu dili kaldırırken ufak tefek yeni sürümlerini de piyasa süreceğini belirtti. Bu sürümlerde olan en ilgi çekici yenilik ise daha iyi durumda olan Unicode desteği ve bit/Unicode ayrım sistemi oluyor.
Tüm bunların yanında, bu hücre dili, yeni başlayanlar ve dile daha fazla hakim olmak isteyenler için oldukça kolay olacak şekilde tasarlanmış. Ayrıca dil içerisindeki işe yaramayan bileşenler kaldırılmış. (örneğin yeni versiyondaki 'range ()' 2.x’deki listelere değil, yenilenebilir hafızaya dönüyor.)
Python 3.0’daki Yenilikler Nelerdir? Adlı döküman, bu gelişmiş dili genel olarak ele alıyor ve mevcut Python 2.x kodlarıyla uyumsuzlukları ve yapılan değişiklikleri bizlere sunuyor. Ayrıca Nick Coghlan, Cpython geliştiricilerinden biri, bu değişiklik hakında 'Sıkça Sorulan Sorular' adlı bir döküman oluşturmuş.
Fakat bu geniş Python ekosistemi, yıllar geçtikçe çok büyük bir birikinti haline geldi. 3.x sürümüyle uyumluluk konusunda eksik olan nokta ise özellikle ev-içi yazılımların henüz 3.x sürümüyle uyumlu bir şekilde çalışmadığıdır.
Eğer Python 3.x diliyle ne yapmak istediğinizi gerçekten biliyorsanız bu harika! Bu sürümde biraz eksik kalmış kütüphane desteği ve şu anki Linux ve Mac işletim sistemlerinin standart olarak 2.x sürümünü kullanması gibi eksik yönler bulunuyor. Fakat bir dil olarak bakıldığında, Python 3.x gerçekten her türlü kullanıma hazır gibi görünüyor. Kişisel bilgisayarınızda Python 3.x yüklü olduğu sürece (bazı insanlar bunu sadece kendileri ya da kontrol ettikleri çevrelerindeki bazı şeyleri geliştiren bir dil olarak gördükleri için bu oldukça kolay olabilir) ve Python 2.x’in gerekli olmadığını düşündüğünüz konularda birşeyler programlıyorsanız, bu mükemmel bir seçim olacaktır. Ayrıca şuan bir çok linux dağıtımı Python 3.x yüklü olarak piyasaya çıkmaktadır. Bu sürümlerin bazıları ise Python 2 yüklü sürümlerini ayrı olarak kullanıcılara sunmaktadır.
Özellikle bu dilin eğitimini veren bireyler, yeni programcı öğrencilerine ilk olarak Python 3 dilini öğretip, daha sonra ise (eğer gerekliyse) Python 2 ve öncesindeki sürümlerle bu yeni sürümün arasındaki farkları öğretmektedirler. Bunun sebebi ise az önce de belirttiğimiz gibi, Python 3, Python 2 sürümlerinde olan bir çok gereksiz bileşeni ortadan kaldırmasıdır.
Fakat, aşağıda Python 3’den ziyade Python 2’yi kullanmanızı gerektiren durumlardan bazıları listelenmiştir.
Ayrıca Twisted (ağ sistemi ve diğer uygulamalar içindir), gevent (Twisted benzeri bir ağ kütüphanesidir fakat mikro-konuları kullanır.) gibi büyük ün kazanmış modüller, henüz Python 3 ile uyumlu olarak çalışamamaktadır.
Yukarıda belirttiğimiz kütüphanelere benzer bir çok kütüphane, 3.x destek üzerine ve geliştirme üzerine çalışan çok fazla sayıda kullanıcıya sahip. Bazı kütüphaneler için, bu durum diğerlerinden daha fazla önceliğe sahiptir. Örneğin Twisted önceki Python versiyonlarını desteklemenin önemli olduğu sunucuların üretimine odaklıdır ve dilde büyük değişikliklere yol açan yeni versiyonları desteklemeye pek karışmaz. (Twisted bu konudaki en büyük örneklerden biridir.)
Kullanıcı arabirimi uygulamaları için Python 3 Tkinter ile donatılmıştır ve Python 3’ün piyasaya çıktığı tarihten bu yana PyQt’yi desteklemektedir. PySide ise Python 3’e 2011 yılında eklenmiştir. GTK+ Kullanıcı arayüzleri (GUI), Python 3 ve PyGtk’yi destekleyen PyGObject ile oluşturulabilir.
Python 3.x kullanmak istiyor fakat destek konusunda bazı kaygılarınız var ise, öncelikle yapmanız gereken şey bir takım araştırma yapmaktır. Bu hala devam eden bir süreçtir ve içinde bulunduğunuz wiki sayfası eski tarihli olabilir. Daha da fazlası, en yaygın alt kümelerin Python 2.6+ ve Python 3.3+ tarafından desteklenmesiyle, özellikle arayüzü ve internet uygulamaları gibi veriyi ve yazıyı kusursuz şekilde harmanlaması gereken uygulamaların kodları gibi Python kodları, Python 3 üzerinde değiştirilmeden kullanılabilir durumda olmalıdır.
Resmi python yardımcı belgelerinin ve derslerinin Python 3 için güncellenmiş olmasına rağmen, internette Python 2’i kullanan belgeler ve referanslar bulunmaktadır. Ayrıca bu belgeler oldukça günceldir. Bunun yerine artık Python 3 için yararlı olan birşeyleri yapmak gerekebilir.
Bazı insanlar Python 3.x sürümlerini kullanmak istememektedirler. Bu onların seçeneği tabi ki. Fakat belirtmekte yarar var, bu insanların sayısı oldukça az.
IronPython, Jython ya da PyPy gibi Python’a alternatif diller kullanmanız size bir yarar sağlamayacaktır, çünkü bu dillerin de Python 3 desteği oldukça azdır. Az önce bahsettiğimiz şey, eğer performans amaçlı bu tarz dilleri diğer sistemlere entegre etmek isteyenlerdenseniz, sizi etkileyebilir.
Fakat yine de 2.x versiyonlarını kullanmaktan kaçınmam gerekmez mi? Bu eski bir versiyondur ve bir çok hata ve gereksiz bileşene sahip ve ayrıca yeni gelen sürüm bu olumsuzlukların hepsini ortadan kaldırdı.
Evet kısmen doğru. 3.0 ve 3.1 versiyonlarında bulunan bazı değişiklikler, 2.6 ve 2.7 versiyonlarına eklendi. Geçmiş versiyonlara eklenen yeni değişiklikler hakkında daha fazla bilgi için, Python 2.6’daki Yenilikler Nelerdir? Ve Python 2.7’deki Yenilikler Nelerdir? Adlı makalelere göz atınız.
Ayrıca dilde yapılan değişiklikler hücrelerin söz dizimi ya da anlamlarında yapılan değişikliklerle sınırlı değildir. Bu değişiklikler ayrıca direk olarak Python 2 versiyonlarına geri yükleme yapılmayacak olan 3.x versiyonlarındaki bir çok değişikliğin bulunduğu standart kütüphaneyi de kapsamaktadır. Fakat standart kütüphane için yapılan bir çok geliştirme aynı zamanda PyPI için de mevcuttur.
İyi yazılmş betik 2.x kodu, 3.x kodu gibi görünebilir. Bu bir çok anlama gelebilir; yeni stil sınıfları kullanma, eski yazdırma için gizli söz dizimlerini kullanmama, yeri geldiğinde ilginç yineleyicileri kullanma gibi. Pratikten bir örnek vermek gerekirse, iyi derlenmiş bir 2.x kodu, tipik olarak range yerine xrange’yi kullanır; xrange, Phyton 3.x için dizi başlangıcını ifade eder. (Dizinlerin Pyhton 3’de daha iyi olmasına rağmen, bu dizinler daha büyük değerlere ev sahipliği yapabilirler). Ayrıca belirtmeliyiz ki, xrange (), Python 3’de çalışmamaktadır.
Yukarıda da belirttiğimiz gibi, 2.x ya da 3.x gibi versiyonları kullanmanızın çok fazla bir önemi yoktur. Önemli olan iyi kodlama yapmaktadır. Bu iyi kodlama, eksiksiz bir test grubu yazma ve Unicode’yi çok iyi anlamaktan geçer. (Python 3.x, Unicode vs Bit konusunda 2.x den daha acımasızdır: Bu iyi bir şey gibi düşünülebilir fakat bazı zaman oldukça sinir bozucu olabilmektedir)
Pyhton 3 kullanmak isiyorum fakat kullanmak istediğim kütüphane sadece Python 2.x uyumlu. Phython 2 mi kullanmalıyım yoksa kullandığım kütüphaneyi mi değiştirmeliyim?
Yukarıda saydıklarımızın arasından en makul ve en ideal olanı mevcut kütüphanenizi 3.x versiyonu ile uyumlu hale getirmektir. Nadiren, bu işlem üzerinde çalışan insanlarla karşılaşabilirsiniz. Asıl odaklanılması gereken konu olmamasına karşın, proje üzerinde çalışan insanlar, hata bulma, kalite artırma gibi konularda yardım almaktan her zaman mutluluk duyarlar. Dönüştürme her zaman kolay bir iş değildir fakat oturup kendi başınıza sıfırdan yazmaktan çok daha kolay bir işlemdir.
Bu dönüştürme işlemini nasıl yapacağınız, Python 2 Dönüştürme Rehberi adlı makalede yazmaktadır. Bu makalede anlatılmak istenen temel şey, 2.x versiyonuyla uyumlu bir kütüphaneyi almak ve deney gruplarının Pyton 2’ye dönüşümü için -3 komut dizini kullanımı sırasında uyarı vermediğinden emin olmaktır. Eğer bu test sırasında bir uyarı ile karşılaşırsanız, gerekli kaynakları değiştirerek tekrar deneyin (bu işlem daha eski Python sürümleriyle uyumsuzluk sornlarına yol açabilmektedir). -3 kod satırını kullandığınızda herhangi bir uyarıyla karşılaşmadığınız zaman, bu kütüphaneyi Python 3’de çalıştırmayı deneyin. Olabilecek en iyi durum, Python 2 de oldukça iyi çalışan – kodu Python 3 ile uyumlu olarak sadece çalışır vaziyette olduğu zaman, dönüştürme işlemi bu adımda mümkün kılınır.
Eğer yapılan denemeler, Python 3’de hata vermeye devam ederse, standart kütüphaneni 2to3 uygulaması, Python 3’de çalışacak bir versiyonu otomatik olarak oluşturacaktır. Buna alternatif olarak, Armin Ronacher’in pyhton-modernize uygulaması 2.6+ sürümlerine yönelik olmak yerine hem 3.2+ hem de 3.3+ sürümlerine yönelik olarak çalışmaktadır (bu durum kullanılan komut satırı seçeneklerine göre değişebilir). (Eğer son sürümü kullanıyorsanız, komut dizininin Python 2’de çalışıp çalışmadığını kontrol etmek oldukça önemlidir.)
Her iki yaklaşım da, tek bir 2.x kod tabanından 2.x ve 3.x versiyonlarını desteklemeyi mümkün kılabilmektedir. Ayrıca bu yöntem, 2.x sürümlerini ve 3.x sürümlerini ayrı ayrı kontrol etmekten çok daha kolaydır.
Eğer yaptığınız testler, otomatik dönüştürme ya da modernize etme işlemlerinden sonra hala hata veriyorsa, kullandığınız kod Python 2 ve 3 arasındaki söz dizimi değişikliğinden etkilenmiş, otomatik olarak başlatılamıyor ve -3 anahtarı tarafından tespit edilemiyordur. Bu gibi durumlar çok nadir meydana gelmektedir fakat eğer bu hatayla karşılaşırsanız, Cpython’un yeni -3 uyarılarına karşı bu hatayı gidermek önemlidir.
Dönüştürme işlemi C genişletme modülleri entegre edildiği zaman ve yapılan proje Cython, cffi ya da SWIG gibi Pyhton 2 ve 3 arasındaki değişiklikleri saptayan oluşturucuları kullanmadığı zaman genellikle daha zor bir hal alır. Geniş Dönüştürme Rehberi adlı döküman, bazı önemli noktalardan bahsetmektedir.
Ayrıca wiki üzerinde bu konuyu daha derin ele almış dökümanlar mevcuttur: PortingPythonToPy3k, PortingExtensionModulesToPy3k.
2.x kaynak kodunun 3.x kodlarında çalışmasını sağlayan 2to3 aracına ek olarak ayrıca 3.x kaynak kodlarını 2.x versiyonlarında çalışacak şekilde uyumlu hale getiren 3to2 aracı bulunmaktadır. Teorik olarak, geriye doğru dönüştürme işlemi, ileriye doğru olandan daha iyi sonuçlar verir. 3.x sürümündeki kodlar, gereksiz bileşenlere sahip olmadığı için geriye dönüştürme daha kolay olacaktır. Fakat sadece 3.x deki özelliklerin çalışmasını sağlayan kodlar, başarılı şekilde geriye dönüştürme işlemine tabi tutulamazlar.
Aslını söylemek gerekirse, 3to2 aracı, 2to3 aracının dönüştürme için kat ettiği yoldan daha az bir yol katederek işlemi gerçekleştirmektedir. Bu yüzden işlem sırasında daha az sayıda hatayla karşılaşmanız muhtemeldir. Eğer 3.x kodu yazmak istiyorsanız, bu fikir keşfetmeye değer.
Python 2.6+ ve Python 3.3+’ın genel kod alt grupları oldukça büyüktür – Python 3.3+’de bulunan Unicode için u ön eki restorasyonu, anlamsal olarak doğru derlenmiş Python 2.6+ kodlarının, Python 3.3+ ile uyumlu şekilde çalışacağı anlamına gelmektedir. Aralarındaki farklılık ise kodların isimleri Python 2’de ve 3’de farklı olduğu için bazı kodlar ve bileşenlerin farklı noktalardan bir diğerine aktarılması gerekebilmesidir.
Buna göre, altı uyumluluk paketi, Python 2 ve Python 3’u aynı kod tabanından desteklemek için yazılan önemli paketlerden biridir.
Gelecek uyumluluk paketi hala deneme aşamasındadır ve Python’un bir çok versiyonunu altı uyumluluk paketi kadar desteklememektedir fakat Pyhton 2’nin Python 3 benzeri bir yapıda yazılmasına izin verir (örneğin bu paket, Python 2.x’in 8bitlik dizgi tipinden ziyade, Python 2 uyumlu Python 3 bit tiplerini içerir.
Standart kütüphane modüllerini tanımlamak için bir diğer ana faktör de 2.x’in kütüphanesine alternatif olarak kullanılabilen PyPI üzerinde güncel geri dönüştürme olup olmadığını saptamaktır.
Aşağıdaki modüller, hem PyPI geri dönüştürmeleri hem de Python 2.7 ya da 3.x’de kullanılan kütüphanenin kaynakları olarak hizmet eden modüllerdir.
Geri dönüştürme isim modülünü kullanmanın avantajı, bu modülün standart kütüphanenin geri dönüştürülmesinde karşılaşılan zıt versiyonları açıkça belli etmesi ve orjinal modül isminin, standart kütüphane isimleriyle çakışmadan kullanılabilesini sağlamasıdır.
Bazı ufak tefek Python 3 eklentileri, ActiveState Python Tarif Kitabı’nda yer almaktadır.
Functools.lru_cache (Raymond Hettinger)
Aşağıdaki modüller geri dönüşüm modülleri değildir. Fakat bunlar standart kütüphane API’leri için karşılık gelen uyumlu versiyonlardır.
Yorumlar